Maison >développement back-end >Golang >Pourquoi les valeurs sans pointeur dans les interfaces Go ne sont-elles pas adressables ?

Pourquoi les valeurs sans pointeur dans les interfaces Go ne sont-elles pas adressables ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 01:33:10382parcourir

Why Are Non-Pointer Values in Go Interfaces Not Addressable?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn