Heim > Backend-Entwicklung > Golang > Wie ändere ich Strukturfelder in Karten in Go?

Wie ändere ich Strukturfelder in Karten in Go?

Mary-Kate Olsen
Freigeben: 2024-12-06 20:23:13
Original
388 Leute haben es durchsucht

How to Modify Struct Fields in Maps in Go?

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

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

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

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

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!

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