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
Linda HamiltonOriginal
2024-12-12 21:06:23934Durchsuche

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)
}

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)
}

Das Programm schlägt mit dem Fehler fehl:

panic: runtime error: assignment to entry in nil map

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)
}

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)
}

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!

Stellungnahme:
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