首頁 >後端開發 >Golang >為什麼我不能直接修改結構體切片上的 Go Range 循環中的值?

為什麼我不能直接修改結構體切片上的 Go Range 循環中的值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-20 17:21:14219瀏覽

Why Can't I Directly Modify Values in a Go Range Loop Over a Struct Slice?

為什麼無法修改一系列型別結構中的值?

此程式查詢源自於無法變更結構化類型範圍內的值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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn