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

Wie ändere ich Strukturfelder in Go-Map-Werten?

DDD
Freigeben: 2024-11-28 19:51:11
Original
913 Leute haben es durchsucht

How to Modify Struct Fields Within Go Map Values?

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

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

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}
Nach dem Login kopieren
// Value Replacement
p := dictionary["xxoo"]
p.b = 5.0
dictionary["xxoo"] = p
Nach dem Login kopieren

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!

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