首頁 >後端開發 >Golang >如何在 Go 中更新嵌套結構體值?

如何在 Go 中更新嵌套結構體值?

Susan Sarandon
Susan Sarandon原創
2024-12-05 14:46:10224瀏覽

How to Update Nested Struct Values in Go?

在Go 中更新結構體值

在Go 中,結構體是值類型,這意味著將一個結構體分配給另一個結構體會複製其值,而不是建立參考。當嘗試修改巢狀結構中的值時,這可能會導致意外行為。

考慮以下程式碼片段:

ftr := FTR{}

err := yaml.Unmarshal([]byte(yamlFile), &ftr)

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

目的是更新每個 Mod 元素的 Type 欄位ftr 結構是基於一系列條件。但是,在程式碼執行後,每個元素的 Type 欄位保持不變。

此行為是由於 range 循環迭代 ftr.Mod 切片的副本而導致的。因此,對循環內的元素變數所做的任何修改都不會反映在原始 ftr.Mod 切片中。

要解決此問題並正確更新 ftr 結構中的值,您可以使用基於索引的迭代而不是在切片上進行範圍調整。這允許您直接修改原始切片中的值:

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"
    }
}

透過迭代 ftr.Mod 切片的索引並直接修改相應的元素,您可以確保原始 ftr 結構更新為有意為之。

以上是如何在 Go 中更新嵌套結構體值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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