struct and inheritance example
package main import ( "fmt" ) type Speaker interface { Speak() string } type Pet struct { name string } type Dog struct { Pet Breed string } func (p *Pet) Play() { fmt.Println(p.Speak()) } func (p *Pet) Speak() string { return fmt.Sprintf("my name is %v", p.name) } func (p *Pet) Name() string { return p.name } func (d *Dog) Speak() string { return fmt.Sprintf("%v and I am a %v", d.Pet.Speak(), d.Breed) } func Speak(p Speaker) { fmt.Println(p.Speak()) //p.Name() // p.Name undefined (type Speaker has no field or method Name) } func main() { d := Dog{Pet: Pet{name: "spot"}, Breed: "pointer"} fmt.Println(d.Name()) fmt.Println(d.Speak()) d.Play() // p* is a Pet, p.Speak -> (p *Pet) Speak() no cast to Dog Speak(&d) }
spot my name is spot and I am a pointer my name is spot my name is spot and I am a pointer