如何在迭代期間有效更新結構體值
在此程式碼片段中,我們有一個帶有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中文網其他相關文章!