Go 如何迭代一段接口?

Go 如何迭代一段接口?,go,Go,还是新来的。我正在努力实现答案。在本例中,我有一个动物界面和一组动物结构。我希望能够对每种动物进行迭代并获得它们的语言。我尝试了一系列指针,但始终出现错误“y.language undefined(type animal没有字段或方法语言)”: 编辑#1:让我的问题更清楚:为什么x:=&dog{}有效,而y:=w无效? 编辑#2:不爱新手;(错误是正确的。y:=w声明y属于animal(因为您的n切片属于animal)类型。因为您的animal界面不包含语言。它不知道该做什么,因此它是一个错误

还是新来的。我正在努力实现答案。在本例中,我有一个动物界面和一组动物结构。我希望能够对每种动物进行迭代并获得它们的语言。我尝试了一系列指针,但始终出现错误“y.language undefined(type animal没有字段或方法语言)”:

编辑#1:让我的问题更清楚:为什么x:=&dog{}有效,而y:=w无效?
编辑#2:不爱新手;(

错误是正确的。
y:=w
声明
y
属于
animal
(因为您的
n
切片属于
animal
)类型。因为您的
animal
界面不包含
语言
。它不知道该做什么,因此它是一个错误

通过使用类型断言,您可以断言它实际上是一个
指针:

fmt.Println(y.(*dog).language)
…然而,我不确定你想要实现什么

当您引入的
cat
也没有
language
属性时,您的结构就会中断。因此,这也会有类似的问题(希望能说明您的问题所在):


您的问题“如何实现接口的一部分?”-您需要向接口添加所需的任何内容,以便“通用”地处理项。这意味着将
语言
属性转换为
语言()
方法,并通过实现
animal
接口的每个对象返回它。

编译时错误消息绝对正确:您的接口只有
speak()
。如果你有一只
动物
,根据界面,你所拥有的只是它会说话。从技术意义上讲,试图掌握它的语言是自以为是的。如果你想获得动物的
语言
,一种方法可能是添加
GetLanguage()
到界面。@CharlieTumahai:也许我不清楚。为什么x:=&dog{}有效,但y:=w无效?@dyoo如果我不使用列表,我可以很好地理解动物的语言:。我的问题更像是为什么x:=&dog{}有效,但y:=w无效?@CharlieTumahai……让问题更清楚了。谢谢你的帮助。对你的评论投了赞成票
fmt.Println(y.(*dog).language)
type cat struct{
}

func (c *cat) speak() {
    // do nothing
}