首頁 >後端開發 >Golang >為什麼 Go 迭代期間結構體值不更新?

為什麼 Go 迭代期間結構體值不更新?

Susan Sarandon
Susan Sarandon原創
2024-12-09 13:14:15793瀏覽

Why are Struct Values Not Updated During Iteration in Go?

如何在迭代期間有效更新結構體值

在此程式碼片段中,我們有一個帶有Mod 結構體數組的struct FTR。我們的目標是根據循環內的特定標準更新 Mod 元素的 Type 欄位。但是,循環完成後,循環內所做的變更似乎並未反映在 FTR 結構中。

問題

問題的核心在於事實上,當您使用range 關鍵字迭代切片或數組時,您只會獲得該元素的副本,而不是對原始元素的引用。這意味著您對循環內的元素所做的任何修改只會影響副本,而原始元素保持不變。

解決方案:使用索引進行迭代

要正確更新結構體的元素,我們需要迭代它們的索引並修改原始元素而不是它們的副本。以下是修正後的程式碼:

type FTR struct {
    Id       string     
    Mod      []Mod  
}

for index := range ftr.Mod{
    switch ftr.Mod[index].Type {
    case “aaa”, “bbbb”:
        ftr.Mod[index].Type = "cccc”
    case "htr”:
        ftr.Mod[index].Type = "com"
    case "no":
        ftr.Mod[index].Type = "jnodejs"
    case "jdb”:
        ftr.Mod[index].Type = "tomcat"
    }

}

在此更新的程式碼中,我們迭代 Mod 陣列的索引,並直接修改原始 FTR 結構上的 Type 欄位。透過這樣做,我們確保循環完成時保留循環內所做的變更。

以上是為什麼 Go 迭代期間結構體值不更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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