package main import "fmt" type Person struct { Name string } func (p Person) Say() { fmt.Println("Hi, my name is", p.Name) } type Student struct { Person //struct Person is embedded Semester int } type Teacher struct { Person //struct Person is embedded Subject string } func main() { max := Person{"Max"} daniel := Student{Person{"Daniel"}, 3} sebastian := Teacher{Person{"Sebastian"}, "PR3"} max.Say() daniel.Say() //can be invoked directly on Student sebastian.Say() //can be invoked directly on Teacher max = sebastian.Person max.Say() }