package main import "fmt" type mover interface { move() } type animal struct { name string } type bird struct { animal } func (b bird) move() { fmt.Printf("%s flies.\n", b.name) } type fish struct { animal } func (f fish) move() { fmt.Printf("%s swims.\n", f.name) } func main() { creatures := []mover{ bird{animal: animal{name: "Robin"}}, fish{animal: animal{name: "Nemo"}}, } for _, c := range creatures { c.move() } }