Heim > Backend-Entwicklung > Golang > Wie aktualisiere ich verschachtelte Strukturwerte in Go?

Wie aktualisiere ich verschachtelte Strukturwerte in Go?

Susan Sarandon
Freigeben: 2024-12-05 14:46:10
Original
216 Leute haben es durchsucht

How to Update Nested Struct Values in Go?

Aktualisieren von Strukturwerten in Go

In Go sind Strukturen Werttypen, was bedeutet, dass das Zuweisen einer Struktur zu einer anderen deren Werte kopiert und nicht eine Referenz erstellen. Dies kann zu unerwartetem Verhalten führen, wenn versucht wird, Werte innerhalb einer verschachtelten Struktur zu ändern.

Beachten Sie den folgenden Codeausschnitt:

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 dem Login kopieren

Die Absicht besteht darin, das Typfeld jedes Mod-Elements in zu aktualisieren Die FTR-Struktur basiert auf einer Reihe von Bedingungen. Nachdem der Code jedoch ausgeführt wurde, bleibt das Typfeld jedes Elements unverändert.

Dieses Verhalten wird durch die Tatsache verursacht, dass die Bereichsschleife über eine Kopie des ftr.Mod-Slice iteriert. Folglich werden alle an der Elementvariablen innerhalb der Schleife vorgenommenen Änderungen nicht im ursprünglichen ftr.Mod-Slice widergespiegelt.

Um dieses Problem zu beheben und die Werte in der ftr-Struktur korrekt zu aktualisieren, können Sie eine indexbasierte Iteration verwenden anstatt über die Scheibe zu reichen. Dadurch können Sie die Werte direkt im Original-Slice ändern:

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

Indem Sie über die Indizes des ftr.Mod-Slices iterieren und die entsprechenden Elemente direkt ändern, stellen Sie sicher, dass die ursprüngliche FTR-Struktur als aktualisiert wird beabsichtigt.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich verschachtelte Strukturwerte in Go?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage