Maison > développement back-end > Golang > Comment puis-je éviter les paniques d'exécution lors de l'utilisation de cartes imbriquées dans Go ?

Comment puis-je éviter les paniques d'exécution lors de l'utilisation de cartes imbriquées dans Go ?

DDD
Libérer: 2024-12-06 06:30:12
original
244 Les gens l'ont consulté

How Do I Avoid Runtime Panics When Using Nested Maps in Go?

Cartes imbriquées dans Go

Dans Go, les cartes sont une structure de données puissante qui vous permet de stocker des paires clé-valeur. Les cartes imbriquées, où les valeurs sont elles-mêmes des cartes, peuvent être un moyen utile d'organiser des données complexes.

Problème

Cependant, certains développeurs ont rencontré des problèmes lorsqu'ils travaillaient avec des cartes imbriquées. Par exemple, l'extrait de code suivant s'exécute avec succès :

func main() {
    var data = map[string]string{}
    data["a"] = "x"
    data["b"] = "x"
    data["c"] = "x"
    fmt.Println(data)
}
Copier après la connexion

Et ce qui suit aussi :

func main() {
    var data = map[string][]string{}
    data["a"] = append(data["a"], "x")
    data["b"] = append(data["b"], "x")
    data["c"] = append(data["c"], "x")
    fmt.Println(data)
}
Copier après la connexion

Mais le code suivant panique au moment de l'exécution :

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
Copier après la connexion

Explication

Le problème se pose car la valeur zéro pour les types de carte dans Go est nulle, indiquant que la carte n'est pas initialisée. Tenter d'accéder ou de stocker des valeurs dans une carte nulle entraîne une panique d'exécution.

Dans le dernier exemple, la carte de données (externe) est initialisée, mais elle n'a aucune entrée. Lorsque vous l'indexez comme data["a"], puisqu'il n'y a pas encore d'entrée avec la clé "a", l'indexer renvoie la valeur zéro du type valeur, qui est nulle pour les cartes. Attribuer à la donnée "a" devient alors une tentative d'affectation à une carte nulle, entraînant une panique.

Solution

Pour éviter ce problème, vous devez initialiser une carte avant d'y stocker des éléments . Cela peut être fait de plusieurs manières :

  • Initialiser la carte externe avec un littéral composite :
var data = map[string]map[string]string{
    "a": {},
    "b": {},
    "c": {},
}
Copier après la connexion
  • Utilisez la marque fonction :
var data = make(map[string]map[string]string)
Copier après la connexion
  • Initialiser les cartes intérieures individuellement :
var data = map[string]map[string]string{}

data["a"] = map[string]string{}
data["b"] = make(map[string]string)
data["c"] = make(map[string]string)
Copier après la connexion

Après l'initialisation, vous pouvez en toute sécurité stocker les valeurs dans les cartes imbriquées.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal