De nouvelles valeurs peuvent être ajoutées à Nil Slice, mais l'ajout de nouvelles valeurs à Nil Map génère une erreur d'exécution. Voyons pourquoi
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
Pourquoi l'ajout à une tranche Nil fonctionne :
Slice est une référence à un tableau sous-jacent et à une structure de données de taille dynamique. Il se compose de 3 composants
Lorsque nous déclarons une tranche nulle, la longueur et la capacité seront nulles et elle ne pointe vers aucun tableau sous-jacent. Fondamentalement, l'opération d'ajout vérifie la capacité et si elle n'est pas suffisante, elle alloue un nouveau tableau sous-jacent avec suffisamment de capacité pour stocker les nouveaux éléments et renvoie une nouvelle tranche qui pointe vers le tableau nouvellement créé. Donc ajouter fonctionne comme prévu.
Pourquoi l'ajout à une carte Nil ne fonctionne pas :
La carte dans Golang agit essentiellement comme une table de hachage et les structures de données internes doivent d'abord être initialisées avant de pouvoir stocker la paire clé-valeur.
Lorsque nous déclarons une carte comme nulle (var m map[string]int), elle n'est pas initialisée et n'est pas encore prête à stocker des paires clé-valeur. Cela créera donc une erreur d'exécution lorsque nous essaierons d'ajouter des valeurs à une carte nulle. Pour éviter de telles erreurs, créez une carte en utilisant make
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
Pour en savoir plus sur ces sujets ainsi que des exemples de code, n'hésitez pas à consulter mon dépôt Github :
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3