Voici quelques pièces de Si une carte n'est pas une variable de référence, c'est quoi? par Dave Chaney:
Une carte de valeur est un pointeur à un moment de l'exécution.hmap structure.
et la conclusion:
Conclusion
Les cartes, comme des canaux, mais contrairement aux tranches, sont juste des pointeurs vers d'exécution
les types. Comme vous l'avez vu ci-dessus, une carte est un pointeur à un moment de l'exécution.hmap
structure.
Les cartes ont le même pointeur de la sémantique que de toute autre valeur du pointeur dans un
Programme de Go. Il n'y a pas de magie enregistrer la réécriture de la carte de la syntaxe par l'
compilateur dans les appels à des fonctions d'exécution/hmap.aller.
Et un morceau intéressant à propos de l'histoire, des explications, des map
syntaxe:
Si les cartes sont des pointeurs, ne devraient-ils pas être *carte[key]valeur?
C'est une bonne question que, si les cartes sont des valeurs de pointeur, pourquoi ne l'
l'expression faire(carte[int]int) retourne une valeur du type carte[int]int.
Ne devrait-il pas renvoyer une *carte[int]int? Ian Taylor a répondu récemment dans un golang-noix thread1.
Dans les tout premiers jours de ce que nous appelons les tables ont été écrits comme des pointeurs,
si vous avez écrit *carte[int]int. Nous avons déménagé loin de que, lorsque nous avons réalisé
que personne n'a jamais écrit map
sans écrire *map
.
Sans doute renommer
le type de *carte[int]int carte[int]int, alors que confusion, car l'
le type ne ressemble pas à un pointeur, a moins de confusion que d'un pointeur
en forme de valeur qui ne peut être déréférencé.