您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

迭代时更改值

迭代时更改值

不,您想要的缩写是不可能的。

原因是range@H_404_4@从您要遍历的切片中复制值。关于范围规范说:

Range expression                          1st value             2nd
@H_404_4@

value (if 2nd variable is present) array or slice a [n]E, *[n]E, or []E index i int a[i] E

因此,范围a[i]@H_404_4@用作数组/切片的第二个值,这实际上意味着该值已被复制,从而使原始值不可触摸。

下面的代码演示了此行为:

x := make([]int, 3)

x[0], x[1], x[2] = 1, 2, 3

for i, val := range x {
    println(&x[i], "vs.", &val)
}
@H_404_4@

代码为您打印出范围中的值和切片中的实际值的完全不同的内存位置:

0xf84000f010 vs. 0x7f095ed0bf68
0xf84000f014 vs. 0x7f095ed0bf68
0xf84000f018 vs. 0x7f095ed0bf68
@H_404_4@

因此,您唯一可以做的就是使用指针或索引,正如jnml和peterSO所建议的那样。

其他 2022/1/1 18:13:36 有628人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶