Zuweisen zu Strukturfeldern in Karten
Bei der Arbeit mit Karten in Go ist es wichtig, die Auswirkungen der Zuweisung zu Strukturfeldern innerhalb dieser Karten zu verstehen Karten. Der Fehler „Zuweisung zu Strukturfeld in einer Karte nicht möglich“ tritt auf, wenn versucht wird, ein Strukturfeld eines in einer Karte gespeicherten Werts direkt zu ändern. Dieser Fehler tritt aufgrund der Art und Weise auf, wie Karten in Go implementiert werden.
In Go ist eine Karte eine Sammlung von Paaren, bei denen der Schlüsseltyp vergleichbar ist und der Elementtyp ein beliebiger Typ sein kann, einschließlich Strukturen. Wenn ein Strukturwert jedoch als Element in eine Karte eingefügt wird, behält er seine Adressierbarkeit nicht bei. Dies bedeutet, dass Versuche, seine Felder so zu ändern, als wäre es ein Zeiger, den oben genannten Fehler auslösen.
Bedenken Sie den folgenden Code:
type Snapshot struct { Key string Users []Users } snapshots := make(map[string] Snapshot, 1) // Initialization snapshots["test"] = Snapshot { Key: "testVal", Users: make([]Users, 0), }
Jetzt ein Versuch, neue Benutzer zum hinzuzufügen Wenn Benutzer innerhalb des in der Karte gespeicherten Snapshot-Werts schneiden, kommt es zu dem gefürchteten Fehler:
snapshots["test"].Users = append(snapshots["test"].Users, user)
Um diese Herausforderung zu meistern, gibt es zwei Möglichkeiten Lösungen:
Methode 1:
Erstellen Sie vor der Änderung eine lokale Kopie des in der Karte gespeicherten Strukturwerts und weisen Sie dann den Karteneintrag mit der geänderten Kopie neu zu:
tmp := snapshots["test"] tmp.Users = append(tmp.Users, user) snapshots["test"] = tmp
Methode 2:
Alternativ definieren Sie die Karte mit einem Zeigertyp, der Änderungen an den Strukturfeldern ermöglicht:
snapshots := make(map[string] *Snapshot, 1) // Initialization snapshots["test"] = &Snapshot { Key: "testVal", Users: make([]Users, 0), }
snapshots["test"].Users = append( snapshots["test"].Users, user) ist jetzt gültig und der Fehler tritt nicht mehr auf. Es ist jedoch wichtig zu beachten, dass die zweite Lösung Auswirkungen auf die Speicherverwaltung haben kann und mit Vorsicht verwendet werden sollte.
Das obige ist der detaillierte Inhalt vonWie ändere ich Strukturfelder in Karten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!