То что вы сделали называется embed (встраивание). Можно отойти от него явно и не путаться.
type Animal struct {
Name string
}
type Rabbit struct {
Ani Animal
}
func (this *Rabbit) Walk() *Rabbit{
this.Ani.Walk()
fmt.Println("...and Jump")
return this
}
func (this *Rabbit) Say() *Rabbit{
this.Ani.Say()
return this
}
Как по мне использовать наименование this вездк где это подразумевается в Golang не лучший выбор, так как усложняется визуальное разделение между разными типами объектов.
Так же можно не дублировть функции так:
rabbit := Rabbit{ }
rabbit.Ani.Name = "Кроль"
rabbit.Ani.Walk()
rabbit.Ani.Say()
rabbit.Ani.Walk()