Maison >développement back-end >Golang >Pourquoi mon code Go génère-t-il une erreur « affectation à une entrée dans une carte nulle » lors de la création d'une carte YAML ?
Résolution de l'erreur d'exécution dans l'attribution de la carte
Un développeur rencontre l'erreur d'exécution "affectation à une entrée dans une carte nulle" lors de la tentative de création d'une carte et convertissez-le en YAML. Le code a pour but de générer une structure comme ceci :
uid : kasi: cn: Chaithra street: fkmp nandan: cn: Chaithra street: fkmp remya: cn: Chaithra street: fkmp
Le code en question est le 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 { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) }
L'erreur vient du fait que la carte interne, "uid" , n'est pas initialisé avant d'attribuer des valeurs à ses entrées. Pour résoudre ce problème, le code peut être modifié comme suit :
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)) m["uid"] = make(map[string]T) // Initialize the inner map here for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) }
En initialisant la carte interne, nous nous assurons qu'elle existe et qu'elle peut se voir attribuer des valeurs sans générer d'erreur d'exécution. Cet ajustement permet au code de générer la structure de carte souhaitée et de la convertir avec succès en YAML.
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!