在 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
}
}



