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 ?
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.
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) }
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) }
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) }
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.
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 :
var data = map[string]map[string]string{ "a": {}, "b": {}, "c": {}, }
var data = make(map[string]map[string]string)
var data = map[string]map[string]string{} data["a"] = map[string]string{} data["b"] = make(map[string]string) data["c"] = make(map[string]string)
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!