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
Libérer: 2024-12-06 16:47:18
original
146 Les gens l'ont consulté

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)
Copier après la connexion

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"}
Copier après la connexion

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))
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal