Maison >développement back-end >Golang >Pourquoi ne puis-je pas adresser directement les valeurs de la carte dans Go ?
Non-adressabilité des valeurs de carte en Go
En Go, les valeurs de carte ne peuvent pas être adressées directement comme en C . Cela devient évident lorsqu'on tente de prendre l'adresse d'une entrée sur une carte. Considérez le code ci-dessous :
import "fmt" func main() { var mymap = make(map[int]string) mymap[1] = "One" var myptr *string = &mymap[1] fmt.Println(*myptr) // Generates error }
Ce code déclenche une erreur indiquant "ne peut pas prendre l'adresse de la valeur de la carte". Cependant, si une variable de chaîne intermédiaire est utilisée pour stocker la valeur avant de prendre son adresse, le code s'exécute sans problème :
import "fmt" func main() { var mymap = make(map[int]string) mymap[1] = "One" mystring := mymap[1] var myptr *string = &mystring fmt.Println(*myptr) // Works }
Pourquoi les valeurs de carte ne sont-elles pas adressables ?
L'interdiction d'adresser directement les valeurs des cartes provient de l'implémentation interne des cartes dans Go. Très probablement, ils sont implémentés comme une sorte de table de hachage. La nature dynamique des tables de hachage permet des insertions et des suppressions, invalidant potentiellement les adresses des entrées existantes.
Pour se protéger contre de telles erreurs, Go empêche l'adressabilité des valeurs de carte. Cela garantit que si la table de hachage sous-jacente est réorganisée, la valeur récupérée reste valide.
Adressage indirect des valeurs
Bien que l'adressage direct des valeurs de carte soit interdit, l'adressage indirect est autorisé. Cela signifie qu'une variable peut contenir la valeur d'une entrée de mappage sans pouvoir modifier directement la valeur. Prenons l'exemple suivant :
var mystring string = mymap[1] // Indirect addressing
Cette ligne attribue la valeur de l'entrée avec la clé 1 dans mymap à mystring. Les modifications apportées à mymap seront reflétées dans mystring. Cependant, mystring est immuable et toute tentative de modification de sa valeur entraînera une erreur.
Conclusion
La non-adressabilité des valeurs de carte dans Go est un choix de conception destiné à garantir que les valeurs extraites d’une carte restent valides, même si la structure de données sous-jacente est réorganisée. Cette restriction évite les erreurs qui pourraient survenir si l'adresse d'une entrée de carte était enregistrée et que la carte était ultérieurement modifiée. Bien qu'il n'offre pas la même flexibilité que dans certains autres langages de programmation, il contribue à la stabilité et à la prévisibilité de l'implémentation de la carte Go.
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!