Maison > développement back-end > Golang > Pourquoi les valeurs non adressables dans les interfaces Golang ne sont-elles pas accessibles par adresse ?

Pourquoi les valeurs non adressables dans les interfaces Golang ne sont-elles pas accessibles par adresse ?

Susan Sarandon
Libérer: 2024-11-28 06:25:17
original
434 Les gens l'ont consulté

Why Are Non-Addressable Values in Golang Interfaces Not Accessable by Address?

Valeurs non adressables dans les interfaces Golang

Le concept de valeurs non adressables dans les interfaces Go, largement discuté dans la documentation Golang et les forums communautaires, soulève la question : pourquoi ces valeurs ne sont-elles pas accessibles via leur adresse ?

Contexte

Au fur et à mesure Le wiki sur MethodSets (https://github.com/golang/go/wiki/MethodSets#interfaces) souligne : « La valeur concrète stockée dans une interface n'est pas adressable, de la même manière qu'un élément de carte n'est pas adressable. " La non-adressabilité des éléments de la carte est bien comprise et expliquée en détail dans l'article complémentaire "Pourquoi les valeurs de la carte ne sont-elles pas adressables ?".

Raison de la non-adressabilité des valeurs d'interface

Cependant , la raison sous-jacente de la non-adressabilité des valeurs dans les interfaces n'est pas aussi claire. Pourquoi la conception du langage impose-t-elle cette restriction ?

La réponse réside dans la préservation de l’intégrité des types. Un pointeur vers une valeur d'un type spécifique, lorsqu'il est affecté à une interface, doit pointer vers une valeur de ce type. Cependant, si l'interface pouvait contenir des valeurs de types différents, le pointeur deviendrait invalide chaque fois qu'une valeur d'un type différent était attribuée à l'interface.

Pour illustrer, considérons une interface I et deux types A et B qui implémenter I :

type I interface{}
type A int
type B string
Copier après la connexion

Si nous stockons une valeur A dans I et prenons l'adresse de cette valeur, le pointeur résultant serait de taper *A. Cependant, si nous attribuons par la suite une valeur B à I, le pointeur deviendrait invalide.

Implications pour les méthodes avec récepteurs de pointeur

La non-adressabilité des valeurs d'interface a des implications directes pour les méthodes avec pointeur récepteurs. De telles méthodes attendent un pointeur vers un type de béton spécifique. Puisqu'une valeur non-pointeur dans une interface n'est pas adressable, elle ne peut pas être transmise à une méthode avec un récepteur de pointeur, ce qui entraîne l'erreur :

<type> does not implement <interface> (<name> method has pointer receiver)
Copier après la connexion

Conclusion

En résumé, le La raison de la non-adressabilité des valeurs dans les interfaces Go est de protéger l'intégrité du type. Un pointeur vers une valeur d'un type spécifique doit toujours pointer vers une valeur de ce type, ce qui ne peut pas être garanti si la valeur est stockée dans une interface pouvant contenir des valeurs de différents types.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal