Go-lang 结构/范围

示例代码(编辑过的代码段):http : //play.golang.org/p/eZV4WL-4N_


为什么是这样


for x, _ := range body.Personality {

    body.Personality[x].Mutate()

}

成功地改变了结构的内容,但是


for _, pf := range body.Personality{

    pf.Mutate()

}

才不是?该范围是否会为其迭代的每个项目创建新实例?因为结构确实会发生变异,但它不会持续存在。


手掌心
浏览 189回答 2
2回答

摇曳的蔷薇

你的第二个循环大致相当于:for x := range body.Personality {    pf := body.Personality[x]    pf.Mutate()}由于body.Personality是一个结构体数组,因此对结构体的赋值pf创建了该结构体的副本,这就是我们所说Mutate()的。如果您想按照示例中的方式遍历数组,一种选择是使其成为指向结构的指针数组(即[]*PFile)。这样循环中的赋值就只需要一个指向结构的指针,允许你修改它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go