【问题标题】:Can I range over a struct that is just a []struct?我可以覆盖一个只是 [] 结构的结构吗?
【发布时间】:2017-01-06 12:38:51
【问题描述】:

我有一些结构定义如下:

type Thing struct {
        Name string
}

type ThingList []Thing

我正在尝试将ThingList 的范围划分如下:

thingList := GetThingListFilledWithValues()
for _, v := range thingList {
        v.DoStuffToThing()
}

它会抛出一个错误,指出您的范围不能超过 thingList,因为它不是切片,而是 type ThingList

知道type ThingList 的根是切片,我如何才能覆盖它?

编辑: 显然,我在这里的帖子中并不完全正确。而不是type ThingList 不正确,而是我试图覆盖的type *ThingList,但它失败了。所以你可以覆盖[]Struct类型的listStruct,而不是*listStruct

谢谢大家帮我找到答案。

【问题讨论】:

  • 我更改了您的for 中的一个错误,并且代码的其他部分看起来正确,请检查play.golang.org/p/ydjoKEgvlX,如果问题仍然存在,也许您可​​以添加更多关于您的代码的上下文跨度>

标签: go


【解决方案1】:

您需要使用新类型的实例作为函数的返回值。你一定是从GetThingListFilledWithValues()返回了错误的东西

例如:

func GetThingListFilledWithValues() ThingList {
    return ThingList{
        Thing{Name: "One"},
        Thing{Name: "Two"},
    }
}

然后像这样使用它

thingList := GetThingListFilledWithValues()
for _, v := range thingList {
    v.DoStuffToThing()
}

这是 go playground https://play.golang.org/p/6lGdbBsQgJ 中的完整示例

【讨论】:

  • 如果你在 ThingList 上有另一个属性,比如名字,它仍然是可迭代的吗?
  • @aeros 是的,没关系。
  • @aeros 没有办法做到这一点。这是一个切片,没有字段。
  • 查看我对上述问题的更新。感谢您为我指明正确的方向。
  • @hobbs 这就是我的想法,一旦你把它变成一个结构,它就是不可迭代的
猜你喜欢
  • 2019-08-29
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多