Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 在固有结构上使用链方法_Go - Fatal编程技术网

Go 在固有结构上使用链方法

Go 在固有结构上使用链方法,go,Go,我是新来的。我正在解决一个与此相似的问题,我有一只从动物结构中继承的结构狗。我想链接这个方法,这样我就可以得到“我是一只动物。呜呜!”这样的结果,但当我运行这个程序时,它会生成一个错误 dog.Animal.Hello().Bark未定义(type*Animal没有字段或方法Bark) 我怎样才能克服这一点。感谢您的推荐。Hello()返回一个*动物,而不是*狗,所以您不能只调用.Bark(),返回值 请注意,调用dog.Hello()实际上并不是在dog结构上调用Hello(),而是在中包含的

我是新来的。我正在解决一个与此相似的问题,我有一只从动物结构中继承的结构狗。我想链接这个方法,这样我就可以得到“我是一只动物。呜呜!”这样的结果,但当我运行这个程序时,它会生成一个错误

dog.Animal.Hello().Bark未定义(type*Animal没有字段或方法Bark)

我怎样才能克服这一点。感谢您的推荐。Hello()返回一个
*动物,而不是
*狗,所以您不能只调用
.Bark()
,返回值

请注意,调用
dog.Hello()
实际上并不是在
dog
结构上调用
Hello()
,而是在中包含的
*Animal
上调用。它只是语法上的糖,相当于
dog.animal.Hello()
(如果
*animal
字段被命名,而不是匿名)。这不是继承

但是,您已经有了一只
*狗
,因此您可以直接调用
.Bark()

dog.Hello()
dog.Bark()

关于接口的评论中的建议也可能适用,但对于这个玩具示例,很难说出您首先要实现的目标。

Go没有Java那样的经典继承。它的组成和设计类层次结构的方式是不同的。按照代码的外观,您有一只
,它有一只
动物
。这与
动物
不同。我建议您查看围棋中的界面。一种可能的方法是创建一个
Animal
接口,该接口可以
MakeNoise()
dog.Hello()
dog.Bark()