This page looks best with JavaScript enabled

Go struct embedding

 ·  🎃 kr0m

In Go, embedding refers to the ability to embed one type into another, allowing us to achieve:

  • Code reusability: Embedding is useful for sharing common behaviors between types without explicitly inheriting from a base class.
  • Composition: It enables the composition of types, meaning that a type can include other types and, therefore, inherit their behaviors.
  • Functionality extension: It is used to extend the functionality of an existing type by incorporating other types that provide additional features.
  • Simplicity and clarity: It can simplify and make the design of types clearer by allowing a more modular and easy-to-understand structure.

If you are new to the world of Go, I recommend the following previous articles:

In this simple example, we have three structures:

  • person: Common structure.
  • student: Inherits from person and additionally adds the string grade.
  • teacher: Inherits from person and additionally adds the int teaching_years.
vi university.go
package main

import "fmt"

type person struct {
    name string
    age int

func (p person) introduction() {
    fmt.Printf("Hello, I'm %s and I'm %d years old.\n",, p.age)

type student struct {
    grade string

func (s student) study() {
    fmt.Printf("%s is studying in %s.\n",, s.grade)

type teacher struct {
    teaching_years int

func (t teacher) teaching() {
    fmt.Printf("%s has been teaching %d years.\n",, t.teaching_years)

func main() {
    student := student{
        person: person{
            name: "Ana",
            age:   20,
        grade: "engineering",
    teacher := teacher{
        person: person{
            name: "Joe",
            age:   30,
        teaching_years: 10,


Let’s execute the code:

go run university.go

We can see how each object shares the fields defined in the person structure (name/age) and also has their respective specific additional fields (grade/teaching_years), besides person, student and teacher structures have a common function introduction and one own function study and teaching respectively due to the Go methods :

Hello, I'm Ana and I'm 20 years old.
Ana is studying in engineering.
Hello, I'm Joe and I'm 30 years old.
Joe has been teaching 10 years.
If you liked the article, you can treat me to a RedBull here