Heim >Backend-Entwicklung >Golang >Wie gehe ich sicher mit verschachtelten Karten in Go um und vermeide Laufzeitfehler?
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!