Erreur d'exécution: affectation de l'entrée dans le néant de la carte
Je suis en train de générer une carte et puis convertir un fichier yaml comme ceci:
uid :
kasi:
cn: Chaithra
street: fkmp
nandan:
cn: Chaithra
street: fkmp
remya:
cn: Chaithra
street: fkmp
Je pense que je vais rater quelque chose d'important lors de la création de la carte. Mon code est ci-dessous.
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)
}
C'est de donner le message d'erreur suivant:
panic: runtime error: assignment to entry in nil map
- double possible de erreur d'Exécution: "l'assignation à l'entrée dans le néant de la carte"
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas initialisé à votre intérieur de la carte. Avant votre boucle, vous pouvez ajouter
m["uid"] = make(map[string]T)
et puis assigner le nom.Vous devriez vérifier si la carte est nul et initialiser un s'il est nul à l'intérieur de la boucle for:
Il est une chose que par le message d'erreur
Pour imbriqués les cartes lors de l'attribuer à la profondeur au niveau des clés nous avons besoin pour être certain que son externe touche a de la valeur. Sinon on va dire que la carte est nulle. Par exemple, dans votre cas,
m est imbriquée carte qui contient
string
clé avecmap[string]T
comme valeur. Et vous affectez la valeurici vous pouvez voir la
m["uid"]
estnil
et nous sommes en précisant qu'il contient une valeur[name]
qui est une clé pour imbriquée valeur de typeT
. Donc, vous devez d'abord assigner une valeur à "uid" ou de réagir comme@Makpoc déjà répondu à la question. juste l'ajout de quelques informations supplémentaires.