首頁 > 後端開發 > Golang > 為什麼我不能直接在 Go Range 迴圈中修改結構體值?

為什麼我不能直接在 Go Range 迴圈中修改結構體值?

Linda Hamilton
發布: 2024-12-26 19:01:09
原創
646 人瀏覽過

Why Can't I Modify Struct Values Directly Within a Go Range Loop?

理解 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板