Maison >développement back-end >Golang >Pourquoi les valeurs sans pointeur dans les interfaces Go ne sont-elles pas adressables ?
Pourquoi les interfaces avec des valeurs non-pointeurs ne sont pas adressables dans Go
La documentation de l'interface de Golang suggère que les valeurs stockées dans les interfaces ne sont pas adressables, comme aux éléments d’une carte. Cela soulève la question de savoir pourquoi les valeurs d'interface ne sont pas adressables.
tl;dr : Maintenir l'intégrité du type
Pour préserver l'intégrité du type, les valeurs non-pointeurs stockées dans les interfaces ne sont pas adressables. Considérons un pointeur (*A) pointant vers une valeur de type A dans une interface. Si un type différent (par exemple, B) était ensuite stocké dans l'interface, le pointeur vers A deviendrait invalide, compromettant la sécurité du type.
Résoudre les implications
Si l'interface Si les valeurs étaient adressables, cela entraînerait des effets inattendus. Par exemple, avec une interface I, deux types A et B implémentant I, et un A stocké dans une instance I, prendre l'adresse de la valeur stockée permettrait de modifier la valeur d'origine via cette adresse. Cependant, lorsqu'une autre valeur B est stockée dans I, le pointeur vers la valeur A d'origine deviendrait invalide.
Avertissement sur le pointeur
Bien que les valeurs d'interface sans pointeur ne soient pas adressable, il est possible d'obtenir un pointeur vers une copie de la valeur en utilisant un casting explicite, par exemple, var a2 A = i.(A) suivi de var aPtr *A = &a2.
Conclusion
La non-adressabilité des valeurs de l'interface garantit l'intégrité du type en empêchant les références de pointeurs non valides lorsque des valeurs de types différents sont stockées dans l'interface.
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!