此程式查詢源自於無法變更結構化類型範圍內的值Go 程式語言。要理解這個問題,需要仔細檢查切片和範圍在 Go 中的運作方式。
儘管您最初的方法是將資料載入到 ChartRecords 陣列中,但修改循環中的值似乎沒有任何效果。輸出並沒有反映修改後的值,而是保留原始值。
混亂源自於 Go 處理切片和範圍的方式。對於 for 語句中的 range 子句,Go 將迭代值指派給對應的迭代變量,但這些變更僅套用於區塊內。這些迭代變數是副本,而不是對原始切片元素的引用。
要對切片元素進行永久更改,必須將迭代變數中的修改值明確分配回切片。以下是更新的程式碼:
for i, elem := range chartRecords { elem.Count = modMe(mod, i) chartRecords[i] = elem }
在這個修改後的循環中,迭代變數 elem 中修改的值被分配回原始切片 ChartRecords,確保變更是持久的。
以上是為什麼我不能直接修改結構體切片上的 Go Range 循環中的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!