问题描述:
遍历一个数组,修改其中的值:
type MyTest struct {
X int
}
arr := make([]MyTest,0,20)
for k,v := range arr{
v.X = Y
}
期待输出,数组中所有的X均被修改成Y
实际输出,数组中所有的X均未发生改变
问题分析
在Go的for…range循环中,Go始终使用值拷贝的方式代替被遍历的元素本身,简单来说,就是for…range中那个value,是一个重复使用的值拷贝,而不是元素本身。不能通过&进行修改某个属性。
解决方案
for i,v := range arr{ arr[i].X = Y }