logo小熊博客
首页 代码速查表 fk标记语言示例 登录
目录
range 遍历的值修改状态不生效

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

上一篇:绑定语法和差值语法区别
下一篇:git拉取代码报错(配置代理端口)
请我喝奶茶!
赞赏码
手机扫码访问
手机访问