为了账号安全,请及时绑定邮箱和手机立即绑定

Go-lang 结构/范围

Go-lang 结构/范围

Go
手掌心 2021-06-15 17:58:47
示例代码(编辑过的代码段):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)。这样循环中的赋值就只需要一个指向结构的指针,允许你修改它。


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信