Adressieren von Kartenwerten
In Go führt der Versuch, ein Strukturfeld direkt innerhalb eines Kartenwerts zu ändern, wie im folgenden Beispiel gezeigt, dazu Dies führt zu einem Kompilierungsfehler:
import ( "fmt" ) type pair struct { a float64 b float64 } func main() { // Create a map where values are of the "pair" type. dictionary := make(map[string]pair) // Add an element to the map. dictionary["xxoo"] = pair{5.0, 2.0} fmt.Println(dictionary["xxoo"]) // Output: {5 2} // Attempt to modify a field within the map value. dictionary["xxoo"].b = 5.0 // Error: cannot assign to dictionary["xxoo"].b }
Diese Fehlermeldung tritt auf, weil Kartenwerte nicht adressierbar sind. Adressierbarkeit ist ein grundlegendes Konzept in Go und bezieht sich auf die Fähigkeit, die Speicheradresse einer Variablen zu finden. Nicht adressierbare Werte können nicht indirekt geändert werden, da der Versuch, auf ein Strukturfeld mit einem nicht adressierbaren Wert zuzugreifen, zu einem Kompilierungsfehler führt.
Um dieses Problem zu lösen, gibt es zwei Hauptansätze:
Zeigerwerte verwenden
Ein Ansatz besteht darin, einen Zeigerwert als Kartenwert zu verwenden. Diese Indirektion macht den Wert adressierbar und ermöglicht Feldänderungen. Hier ein Beispiel:
import ( "fmt" ) type pair struct { a float64 b float64 } func main() { // Create a map where values are pointers to "pair" structs. dictionary := make(map[string]*pair) // Add an element to the map. dictionary["xxoo"] = &pair{5.0, 2.0} fmt.Println(dictionary["xxoo"]) // Output: &{5 2} // Modify a field within the pointed-to struct. dictionary["xxoo"].b = 5.0 fmt.Println(dictionary["xxoo"].b) // Output: 5 }
Kopieren oder Ersetzen von Werten
Alternativ können Sie mit nicht adressierbaren Werten arbeiten, indem Sie den Wert kopieren oder vollständig ersetzen. Hier sind zwei Beispiele:
// Value Copying dictionary["xxoo"] = pair{5.0, 5.0}
// Value Replacement p := dictionary["xxoo"] p.b = 5.0 dictionary["xxoo"] = p
Mit beiden Ansätzen können Sie die „Paar“-Struktur innerhalb der Karte ändern.
Das obige ist der detaillierte Inhalt vonWie ändere ich Strukturfelder in Go-Map-Werten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!