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