1. 程式人生 > >golang range 遍歷

golang range 遍歷

問題描述:

遍歷一個數組,修改其中的值:

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
}