Maison >développement back-end >Golang >Pourquoi l'affectation à une carte dans Go entraîne-t-elle une « erreur d'exécution : affectation à une entrée dans une carte nulle » et comment peut-elle être corrigée ?
Erreur d'exécution dans l'attribution de la carte
Question :
Lors de la tentative de conversion d'une carte en un fichier YAML, une erreur est rencontrée indiquant "erreur d'exécution : affectation à l'entrée dans une carte nulle". Consultez l'extrait de code suivant :
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) }
Quelle est la cause de cette erreur et comment peut-elle être résolue ?
Réponse :
Le problème réside dans l'initialisation de la carte interne dans la carte externe. Dans l'exemple fourni, la carte m["uid"] n'est pas initialisée, ce qui entraîne une carte nulle lorsque vous tentez de lui attribuer le nom.
Pour initialiser la carte interne, ajoutez la ligne suivante avant le for loop :
m["uid"] = make(map[string]T)
Cela crée la carte interne et permet de lui attribuer le nom sans rencontrer d'erreur de carte nulle.
Le code corrigé devient :
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) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!