Go 在固有结构上使用链方法
我是新来的。我正在解决一个与此相似的问题,我有一只从动物结构中继承的结构狗。我想链接这个方法,这样我就可以得到“我是一只动物。呜呜!”这样的结果,但当我运行这个程序时,它会生成一个错误 dog.Animal.Hello().Bark未定义(type*Animal没有字段或方法Bark) 我怎样才能克服这一点。感谢您的推荐。Hello()返回一个Go 在固有结构上使用链方法,go,Go,我是新来的。我正在解决一个与此相似的问题,我有一只从动物结构中继承的结构狗。我想链接这个方法,这样我就可以得到“我是一只动物。呜呜!”这样的结果,但当我运行这个程序时,它会生成一个错误 dog.Animal.Hello().Bark未定义(type*Animal没有字段或方法Bark) 我怎样才能克服这一点。感谢您的推荐。Hello()返回一个*动物,而不是*狗,所以您不能只调用.Bark(),返回值 请注意,调用dog.Hello()实际上并不是在dog结构上调用Hello(),而是在中包含的
*动物,而不是*狗,所以您不能只调用.Bark()
,返回值
请注意,调用dog.Hello()
实际上并不是在dog
结构上调用Hello()
,而是在中包含的*Animal
上调用。它只是语法上的糖,相当于dog.animal.Hello()
(如果*animal
字段被命名,而不是匿名)。这不是继承
但是,您已经有了一只*狗
,因此您可以直接调用.Bark()
:
dog.Hello()
dog.Bark()
关于接口的评论中的建议也可能适用,但对于这个玩具示例,很难说出您首先要实现的目标。Go没有Java那样的经典继承。它的组成和设计类层次结构的方式是不同的。按照代码的外观,您有一只狗
,它有一只动物
。这与狗
是动物
不同。我建议您查看围棋中的界面。一种可能的方法是创建一个Animal
接口,该接口可以MakeNoise()
。
dog.Hello()
dog.Bark()