for-loop - 在范围循环中调用结构体方法

标签 for-loop go range

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

为什么会这样

for x, _ := range body.Personality {
    body.Personality[x].Mutate()
}

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

for _, pf := range body.Personality{
    pf.Mutate()
}

不是吗? range 是否会为其迭代的每个项目创建新实例?因为该结构实际​​上会发生变化,但不会持续存在。

最佳答案

range 关键字复制数组的结果,因此无法更改 使用范围值的内容。您必须使用索引或指针 slice 而不是值 如果你想改变原始数组/slice 。

规范涵盖了此行为,如here所述。关键是分配线 x := a[i] 将值 a[i] 复制到 x,因为它不是指针。由于 range 被定义为使用 a[i],值被复制。

关于for-loop - 在范围循环中调用结构体方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905187/

相关文章:

image - 如何更改图像中的像素值范围?

javascript - 如何突出显示 DOM Range 对象的文本?

arrays - 如何在Linux中使用带有多个变量的for循环

java - 为什么调试程序和运行程序的输出顺序不同?

reflection - Golang-获取结构属性名称

Python:打印每行的范围

java - AlertDialog 依次显示/关闭

c - 数组中的整数索引递增

json - 从 restful API 获取 POST 类型方法的响应

json - 有没有办法使用 Go 将 JSON 字符串转换为 Mongodb 扩展 JSON?