Как «наследовать метод» golang?
package main


import "fmt"

type AnimalIntf interface {
	Walk() AnimalIntf
	Say() AnimalIntf
}

type Animal struct {
	animal    AnimalIntf
	Name string
}

type Rabbit struct {
	Animal
}


// Animal
func NewAnimal(name string) *Animal {
	animal := new(Animal)
	animal.animal = animal
	animal.Name = name
	return animal
}

//Метод Walk у каждого свой
func (this *Animal) Walk() AnimalIntf {
	fmt.Println("I walk", this.Name)
	return this.animal
}

//Метод Say общий
func (this *Animal) Say() AnimalIntf {
	fmt.Println("Im Animal and my Name is", this.Name)
	return this.animal
}


// Rabbit
func NewRabbit(name string) *Rabbit {
	rabbit := new(Rabbit)
	rabbit.animal = rabbit
	rabbit.Name = name
	return rabbit
}

//Метод Walk изменяется для Rabbit и работает корректно
func (this *Rabbit) Walk() AnimalIntf {
	this.Animal.Walk()
	fmt.Println("...and Jump")
	return this.animal
}


func main() {

	animal := NewAnimal("Зверь")
	animal.Walk().Say().Walk()

	fmt.Println("\n---------------------\n")

	rabbit := NewRabbit("Кроль")
	rabbit.Walk().Say().Walk()

}
примерно так, как вариант
вывод:I walk Зверь
Im Animal and my Name is Зверь
I walk Зверь

---------------------

I walk Кроль
...and Jump
Im Animal and my Name is Кроль
I walk Кроль
...and Jump
Это называется late binding (позднее связывание) оно делается просто через reflection, но противоречит идее go.
stackoverflow.com/questions/10255926/go-reflection...