"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Go Basics : Pourquoi les tranches nulles acceptent de nouvelles valeurs, mais pas les cartes nulles

Go Basics : Pourquoi les tranches nulles acceptent de nouvelles valeurs, mais pas les cartes nulles

Publié le 2024-11-01
Parcourir:449

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

  • Pointeur vers le tableau sous-jacent
  • Longueur de la tranche
  • Capacité de tranche

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]

  • Go prend-il en charge la référence Pass By ?
  • nouveau vs marque dans Go
  • Go prend-il en charge l'héritage ?
  • Comment créer un serveur web simple dans Go ?

Pour en savoir plus sur ces sujets ainsi que des exemples de code, n'hésitez pas à consulter mon dépôt Github :

Go Basics: Why nil Slices accept new values, but nil Maps don Sai7xp / apprendre-golang

GoLang Basics à Avancé. Y compris les modèles de conception, les principes SOLID et plus encore

Déclaration de sortie Cet article est reproduit sur : https://dev.to/sai7xp/go-basics-why-nil-slices-accept-new-values-but-nil-maps-dont-23l0?1. En cas d'infraction, veuillez contacter study_golang@163 .comdelete
Dernier tutoriel Plus>

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