不,您想要的缩写是不可能的。
原因是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所建议的那样。