Maison >développement back-end >Golang >Pourquoi est-ce que je reçois une « Erreur d'exécution : affectation à une entrée dans une carte nulle » dans Go ?

Pourquoi est-ce que je reçois une « Erreur d'exécution : affectation à une entrée dans une carte nulle » dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 16:47:18153parcourir

Why Am I Getting a

Comprendre « Erreur d'exécution : affectation à une entrée dans une carte nulle »

Lorsque vous essayez d'utiliser la structure de données cartographiques intégrée de Go, vous pouvez rencontrez la redoutable « erreur d’exécution : affectation à l’entrée dans une carte nulle ». Cette erreur provient d'une tentative d'attribuer une valeur à une clé inexistante dans une map nulle (ou non initialisée).

Dans votre cas spécifique, vous essayez de générer un fichier YAML à partir d'une map, où chaque La clé représente un "uid" et chaque valeur est une carte contenant des informations sur un individu. Cependant, votre code rencontre l'erreur d'exécution.

Solution : initialisation de la carte interne

Le problème survient car votre carte interne ("uid") n'est pas initialisée avant vous. essayez d'attribuer des valeurs à ses clés (par exemple, "kasi", "remya" et "nandan"). Pour résoudre cela, ajoutez simplement la ligne suivante avant la boucle for :

m["uid"] = make(map[string]T)

Cette ligne initialise la carte interne et l'associe à la clé "uid" dans votre carte externe (m). Désormais, vous pouvez attribuer en toute sécurité des valeurs aux clés dans la carte interne :

m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

Code raffiné

Voici votre code avec le correctif en place :

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)
    for _, name := range names {

        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

    }
    fmt.Println(m)

    y, _ := yaml.Marshal(&m)

    fmt.Println(string(y))
}

Avec cette modification, vous ne rencontrerez plus l'"erreur d'exécution : affectation à l'entrée dans une carte nulle." Votre code générera avec succès un fichier YAML avec la structure souhaitée.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn