Umu*_*ürk 8 arrays pointers go
如果我有 PersonManager 结构并且它有 *[]Person 数组。我想排列这个数组中的每个项目。例如
manager := *PersonManager
for ii := 0; len(*manager.allPersons); ii++{
fmt.Println(manager.allPersons[:ii].name)
}
Run Code Online (Sandbox Code Playgroud)
对于这个例子,管理器变量是指针和数组,在这个变量中也是指针。我该如何排列这些项目?
不:我收到 Cannot slice manager.allPersons (type *[]Person) 错误
Ray*_*ear 12
使用range关键字。https://github.com/golang/go/wiki/Range
for i, person := range *manager.allPerson {
fmt.Println(person.name)
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您不使用索引 var ,编译器会生气i。如果您不想使用它,请替换为_。
为了进一步解释,您最初的错误是由于您*[]Person第一次正确取消引用,但不是在for循环内。
fmt.Println(manager.allPersons[:ii].name) // wrong
fmt.Println((*manager.allPersons)[:ii].name) // right
Run Code Online (Sandbox Code Playgroud)
另外,考虑到您slice包含Personstruct value,如果您在表达式中使用可选的第二个值,则必须复制它range。因此,继续仅使用索引会更有效。
作为建议,不要使用 a *[]Person、 use []*Person,这可能正是您打算使用的。Aslice已经是一个指针值。使用时[]*Person您不必担心range表达式的副本,因为它只是指向 aPerson而不是整个结构的指针。
事实上,除非您将类型更改为[]*Person或将索引更改为 ,slice否则您将无法在切片中反映更改,因为结构体值将是循环中的副本range。请参阅https://github.com/golang/go/wiki/Range#gotchas但请注意,如果该值是指针值,则这不是问题。
| 归档时间: |
|
| 查看次数: |
12672 次 |
| 最近记录: |