理解 Go 中的範圍變數
問:為什麼我無法修改型別結構範圍內的數值?
在 Go 中,切片和範圍的概念可能會讓新手感到困惑。 range 語句迭代集合中的元素,並將它們指派給迭代變數。但是,對於結構體,修改這些變數不會修改原始值。
A:分配迭代變數
Go 程式語言規範指出,對於在帶有range 子句的語句中,迭代變數被賦予集合中每個元素的值。但是,這些變數僅是循環體的局部變數。
修改迭代變數
當您修改循環內的迭代變數時,實際上並沒有修改原始變數具有收藏價值。相反,您將建立該值的新副本並將其指派給迭代變數。
解決方案:分配修改後的值
修改集合中的原始值,您需要將修改後的迭代變數指派回原始集合。在範例程式碼中,需要將 elem.Count 的修改後的迭代變數指派回 ChartRecords[i]。
更新的程式碼
這裡是更新的程式碼必要的修改:
for i, elem := range chartRecords { elem.Count = modMe(mod, i) chartRecords[i] = elem fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name) }
此修改確保修改後的elem.Count 值正確分配回圖表記錄切片。
以上是為什麼我不能直接在 Go Range 迴圈中修改結構體值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!