仍然是 Go 的新手。我正在尝试按照我上一个问题的建议实施答案。在这种情况下,我有一个动物界面和一堆动物结构。我希望能够遍历每个动物并获得它的语言。我已经尝试了一个指针列表,但我不断收到错误“y.language undefined(动物类型没有字段或方法语言)”:package mainimport "fmt"type animal interface { speak()}type dog struct{ language string}func (d *dog) speak() { d.language = "woof"}var n = []animal{ &dog{},}func main() { for _, w := range n{ x := &dog{} fmt.Println(x) x.speak() fmt.Println(x.language) // this works fmt.Println(w) y := w y.speak() fmt.Println(y.language) // but this doesn't...why?? }}编辑#1:为了让我的问题更清楚:为什么 x := &dog{} 有效但 y := w 无效?编辑 #2:不喜欢新手;(
1 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
错误是正确的。y := w声明y为 type animal(因为您的nslice 为 type animal)。由于您的animal界面不包含language......它不知道该怎么做,因此这是一个错误。
您可以dog使用类型断言断言它实际上是一个指针:
fmt.Println(y.(*dog).language)
..但是,我不确定您要实现的目标。
当您引入一个cat也没有language属性的结构时,您的结构就会中断。因此,这也会有类似的问题(并希望证明您的问题所在):
type cat struct{
}
func (c *cat) speak() {
// do nothing
}
对“如何实现接口切片?”的问题的回答。- 您需要将您需要的任何内容添加到界面中,以便“一般地”处理项目。这意味着将language属性转换为Language()方法并通过实现animal接口的每个单独对象返回它。
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消