Heim > Backend-Entwicklung > Golang > Wie gehe ich sicher mit verschachtelten Karten in Go um und vermeide Laufzeitfehler?

Wie gehe ich sicher mit verschachtelten Karten in Go um und vermeide Laufzeitfehler?

Linda Hamilton
Freigeben: 2024-12-12 21:06:23
Original
943 Leute haben es durchsucht

How to Safely Handle Nested Maps in Go and Avoid Runtime Errors?

Verschachtelte Karten in Golang

In Golang können verschachtelte Karten verwendet werden, um hierarchische Datenstrukturen zu erstellen. Bei der Arbeit mit verschachtelten Karten kann es jedoch zu unerwartetem Verhalten kommen.

Unterstützung mehrerer Klammern

Go unterstützt mehrere Klammern für den Zugriff auf verschachtelte Karten. Der folgende Code gibt beispielsweise erfolgreich den mit dem Schlüssel „w“ verknüpften Wert aus:

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
Nach dem Login kopieren
Nach dem Login kopieren

Nil Map

Das Problem tritt auf, wenn die verschachtelte Karte nicht vorhanden ist initialisiert. Der Nullwert für Kartentypen ist Null. Das Indizieren einer Null-Map führt zu einem Laufzeitfehler. Wenn der obige Code beispielsweise wie folgt geändert wird:

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
Nach dem Login kopieren
Nach dem Login kopieren

Das Programm schlägt mit dem Fehler fehl:

panic: runtime error: assignment to entry in nil map
Nach dem Login kopieren

Um dieses Problem zu beheben, muss die verschachtelte Karte zuvor initialisiert werden Zuweisen von Werten zu seinen Einträgen:

func main() {
    var data = map[string]map[string]string{}

    data["a"] = map[string]string{}
    data["b"] = make(map[string]string)
    data["c"] = make(map[string]string)

    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
Nach dem Login kopieren

Alternativ können zusammengesetzte Literale verwendet werden, um die verschachtelten Elemente zu initialisieren Karten:

func main() {
    var data = map[string]map[string]string{
        "a": map[string]string{},
        "b": map[string]string{},
        "c": map[string]string{},
    }

    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie gehe ich sicher mit verschachtelten Karten in Go um und vermeide Laufzeitfehler?. 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