Heim > Artikel > Backend-Entwicklung > Warum ändert das Aktualisieren von Werten in einer Go-Struktur innerhalb einer Schleife nicht die ursprüngliche Struktur?
Wert in Struktur aktualisieren
Beim Umgang mit Strukturen kann das Aktualisieren von Werten eine Herausforderung darstellen. Betrachten Sie den folgenden Code:
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" } }
Nach der Ausführung dieser Schleife wird die ursprüngliche FTR-Struktur trotz der offensichtlichen Aktualisierungen innerhalb der Schleife nicht geändert. Was könnte das Problem sein?
Das Problem: Zeiger und Struct Unwrap
In Go wird durch die Übergabe einer Struktur an eine Funktion per Wert eine Kopie der Struktur erstellt, im Gegensatz dazu Übergabe als Referenz, die einen Zeiger auf die ursprüngliche Struktur bereitstellt. In diesem Fall erstellt die Iteration über ftr.Mod mithilfe von range Kopien der Mod-Elemente, was bedeutet, dass alle innerhalb der Schleife vorgenommenen Änderungen nicht in der ursprünglichen ftr-Struktur widergespiegelt werden.
Die Lösung: Verwendung von Indizes und Zeigern
Um die ursprüngliche FTR-Struktur zu ändern, befolgen Sie diese Schritte:
Hier ist der geänderte Code:
type FTR struct { Id string Mod []*Mod // Use pointers for 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" } }
Durch die Verwendung von Zeigern können Sie direkt Ändern Sie die Werte in der ursprünglichen FTR-Struktur.
Das obige ist der detaillierte Inhalt vonWarum ändert das Aktualisieren von Werten in einer Go-Struktur innerhalb einer Schleife nicht die ursprüngliche Struktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!