在 Go 中,range 遍历的值修改状态不生效
在处理二维切片[][]Element
时,我想将所有元素的 Win 和 New 状态重置为 false:
for _, item := range wheel { for _, elem := range item { elem.Win = false elem.New = false } }
但是,打印前后状态一模一样,根本没清除成功。
原因:
Go 中的 range 在遍历 slice 时,会复制一份元素副本,elem 只是一个拷贝,改它不会影响原数据。
for _, elem := range slice { elem = xxx // 改的是副本 }
不会修改 slice 的原始值!
正确做法:用下标访问原始元素
for i := range wheel { for j := range wheel[i] { wheel[i][j].Win = false wheel[i][j].New = false } }