示例代码(编辑过的代码段):http : //play.golang.org/p/eZV4WL-4N_为什么是这样for x, _ := range body.Personality { body.Personality[x].Mutate()}成功地改变了结构的内容,但是for _, pf := range body.Personality{ pf.Mutate()}才不是?该范围是否会为其迭代的每个项目创建新实例?因为结构确实会发生变异,但它不会持续存在。
2 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
你的第二个循环大致相当于:
for x := range body.Personality {
pf := body.Personality[x]
pf.Mutate()
}
由于body.Personality是一个结构体数组,因此对结构体的赋值pf创建了该结构体的副本,这就是我们所说Mutate()的。
如果您想按照示例中的方式遍历数组,一种选择是使其成为指向结构的指针数组(即[]*PFile)。这样循环中的赋值就只需要一个指向结构的指针,允许你修改它。
- 2 回答
- 0 关注
- 188 浏览
添加回答
举报
0/150
提交
取消