Laufzeitfehler bei der Kartenzuweisung
Frage:
Beim Versuch, eine Karte zu konvertieren Wenn Sie eine YAML-Datei erstellen, tritt ein Fehler mit der Meldung „Laufzeitfehler: Zuordnung zum Eintrag in der Nullzuordnung“ auf. Sehen Sie sich den folgenden Codeausschnitt an:
package main import ( "fmt" "gopkg.in/yaml.v2" ) type T struct { cn string street string } func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) for _, name := range names { //t := T{cn: "Chaithra", street: "fkmp"} m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
Was verursacht diesen Fehler und wie kann er behoben werden?
Antwort:
Das Problem liegt bei der Initialisierung der inneren Karte innerhalb der äußeren Karte. Im bereitgestellten Beispiel ist die Karte m["uid"] nicht initialisiert, was zu einer Null-Karte führt, wenn versucht wird, ihr den Namen zuzuweisen.
Um die innere Karte zu initialisieren, fügen Sie die folgende Zeile vor dem for hinzu Schleife:
m["uid"] = make(map[string]T)
Dies erstellt die innere Karte und ermöglicht die Zuweisung des Namens, ohne dass ein Null-Kartenfehler auftritt.
Die korrigierte Code wird zu:
func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) m["uid"] = make(map[string]T) // Initialize the inner map for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
Das obige ist der detaillierte Inhalt vonWarum führt die Zuweisung zu einer Map in Go zu einem „Laufzeitfehler: Zuweisung zum Eintrag in der Null-Map' und wie kann das behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!