Heim >Backend-Entwicklung >Golang >Warum werden Strukturwerte während der Iteration in Go nicht aktualisiert?
So aktualisieren Sie Strukturwerte während der Iteration effektiv
In diesem Codeausschnitt haben wir eine Struktur-FTR mit einem Array von Mod-Strukturen. Unser Ziel ist es, das Typfeld von Mod-Elementen basierend auf bestimmten Kriterien innerhalb einer Schleife zu aktualisieren. Es scheint jedoch, dass die innerhalb der Schleife vorgenommenen Änderungen nach Abschluss der Schleife nicht in der FTR-Struktur widergespiegelt werden.
Das Problem
Der Kern des Problems liegt darin die Tatsache, dass Sie beim Durchlaufen eines Slice oder Arrays mit dem Schlüsselwort „range“ nur eine Kopie des Elements erhalten, keinen Verweis auf das ursprüngliche Element. Das bedeutet, dass sich alle Änderungen, die Sie innerhalb der Schleife am Element vornehmen, nur auf die Kopie auswirken und das ursprüngliche Element unverändert lässt.
Lösung: Iterieren mit Indizes
Zur korrekten Vorgehensweise Um die Elemente der Struktur zu aktualisieren, müssen wir ihre Indizes durchlaufen und die ursprünglichen Elemente anstelle ihrer Kopien ändern. Hier ist der korrigierte Code:
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" } }
In diesem aktualisierten Code iterieren wir über die Indizes des Mod-Arrays und ändern das Feld „Typ“ direkt in der ursprünglichen FTR-Struktur. Dadurch stellen wir sicher, dass die innerhalb der Schleife vorgenommenen Änderungen erhalten bleiben, wenn die Schleife abgeschlossen ist.
Das obige ist der detaillierte Inhalt vonWarum werden Strukturwerte während der Iteration in Go nicht aktualisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!