Warum sind meine Strukturaktualisierungen in einer Go-Schleife nicht dauerhaft?

DDD
Freigeben: 2024-11-15 11:33:02
Original
512 Leute haben es durchsucht

Why Aren't My Struct Updates Persistent in a Go Loop?

Wert in Struktur aktualisieren funktioniert nicht

Obwohl Elemente innerhalb einer Struktur während Schleifeniterationen manipuliert werden, bleiben die Aktualisierungen beim Verlassen der Schleife nicht bestehen. Für die korrekte Strukturmanipulation ist es von entscheidender Bedeutung, den Grund für dieses Verhalten zu verstehen.

Das Problem

Beim Durchlaufen eines Struktursegments verweist die Schleifenvariable auf eine Kopie des Originalelements und nicht auf das Element selbst . Daher wirken sich alle innerhalb der Schleife vorgenommenen Änderungen nur auf die Kopie und nicht auf das eigentliche Element im Slice aus.

Die Lösung

Um die Strukturelemente erfolgreich zu aktualisieren, kann der folgende Ansatz verwendet werden:

  • Iterieren Sie über die Indizes statt über den Slice: Durch das Iterieren über die Indizes erhält man direkten Zugriff auf das eigentliche Strukturelement. Dies ermöglicht Änderungen, die über die Schleife hinaus bestehen bleiben.
  • Zeiger vermeiden: Zeiger auf Slices oder Elemente sind beim Aktualisieren von Werten nicht erforderlich. Auf das Slice kann direkt zugegriffen werden und Elemente können ohne Zeiger aktualisiert werden.

Hier ist ein aktualisierter Codeausschnitt, der der Lösung folgt:

type FTR struct {
    Id       string
    Mod      []Mod
}

type Mod struct {
    Name       string
    Type       string
}

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"
    }
}
Nach dem Login kopieren

Indem Sie dies übernehmen Ansatz werden die Strukturelemente erfolgreich aktualisiert und die Änderungen bleiben bestehen, nachdem die Schleife beendet wird.

Das obige ist der detaillierte Inhalt vonWarum sind meine Strukturaktualisierungen in einer Go-Schleife nicht dauerhaft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage