Ich versuche eine Karte zu generieren und diese dann in eine Yaml-Datei wie diese zu konvertieren:
uid :
kasi:
cn: Chaithra
street: fkmp
nandan:
cn: Chaithra
street: fkmp
remya:
cn: Chaithra
street: fkmp
Ich glaube, mir fehlt beim Erstellen der Karte etwas Wichtiges. Mein Code ist unten.
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)
}
Es wird der folgende Fehler ausgegeben:
panic: runtime error: assignment to entry in nil map
Antworten:
Sie haben Ihre innere Karte nicht initialisiert. Vor Ihrer for-Schleife können Sie
m["uid"] = make(map[string]T)
den Namen hinzufügen und dann zuweisen.quelle
Sie sollten überprüfen, ob die Map Null ist, und eine initialisieren, wenn sie in der for-Schleife Null ist:
quelle
Es gibt etwas gemäß dem Fehler
Bei verschachtelten Karten, die dem Deep-Level-Schlüssel zugewiesen sind, müssen wir sicherstellen, dass sein äußerer Schlüssel einen Wert hat. Sonst wird gesagt, dass die Karte Null ist. Zum Beispiel in Ihrem Fall
m ist eine verschachtelte Karte, die einen
string
Schlüssel mit einemmap[string]T
Wert enthält. Und Sie weisen den Wert zuHier können Sie das
m["uid"]
is sehennil
und wir geben an, dass es einen Wert enthält,[name]
der ein Schlüssel zum verschachtelten Wert vom Typ istT
. Also müssen Sie zuerst "uid" einen Wert zuweisen oder ihn als initialisierenquelle
@ Makpoc hat die Frage bereits beantwortet. nur ein paar zusätzliche Infos hinzufügen.
quelle