我是 Go 的新手。我正在解决一个与此相似的问题,我有一个从 Animal 结构继承的结构 Dog。我想链接方法,这样我就可以得到像“我是动物。汪!”这样的结果。但是当我运行这个程序时,它产生了一个错误
dog.Animal.Hello().Bark undefined (type *Animal has no field or method Bark)
type Animal struct {
name string
age int
}
func (animal *Animal) Hello() *Animal {
fmt.Println("I am an animal")
return animal
}
type Dog struct {
*Animal
}
func (dog *Dog) Bark() *Dog {
fmt.Println("woof!")
return dog
}
func main() {
dog := &Dog{&Animal{name: "Peter", age: 25}}
dog.Hello().Bark()
}
我怎样才能克服这个问题。感谢您的任何建议
最佳答案
dog.Hello()
返回一个 *Animal
,而不是一个 *Dog
,所以你不能只调用 。 Bark()
返回值。
请注意,调用 dog.Hello()
并不真的调用 Dog
上的 Hello()
> 结构,而是包含在 *Animal
中。它只是语法糖,相当于 dog.animal.Hello()
(如果 *Animal
字段被命名,而不是匿名)。这不是继承!
但是,您已经有了一个*Dog
,所以您可以直接调用.Bark()
:
dog.Hello()
dog.Bark()
关于接口(interface)的评论中的建议也可能适用,但对于这个玩具示例,很难说出您首先要实现的目标。
关于go - 在继承的结构上使用链方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53175308/