Maison > développement back-end > Golang > le corps du texte

Pourquoi ne puis-je pas obtenir l'adresse d'une valeur stockée dans une interface Go ?

Linda Hamilton
Libérer: 2024-11-02 09:16:02
original
882 Les gens l'ont consulté

 Why Can't I Get the Address of a Value Stored in a Go Interface?

Adressage d'une valeur dans une interface

Tenter d'obtenir l'adresse d'une valeur stockée dans une interface entraîne souvent des erreurs, telles que "ne peut pas prenez l'adresse de el.Value.(retry)". Pour comprendre cette limitation, nous devons examiner la nature des variables d'interface.

Une variable d'interface se compose de deux parties : l'une décrivant le type de la valeur contenue et l'autre stockant directement la valeur ou tenant un pointeur vers sa valeur. stockage. La valeur stockée dans une interface appartient à la variable d'interface elle-même. De plus, le stockage de cette valeur peut être réutilisé lorsque l'interface se voit attribuer une nouvelle valeur.

À titre d'exemple :

<code class="go">var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}</code>
Copier après la connexion

Dans ce scénario, le stockage utilisé pour contenir l'entier est réutilisé pour contenir un pointeur, rendant la valeur à *p une représentation entière invalide du nouveau pointeur. Ce comportement pourrait facilement compromettre le système de types et pour cette raison, Go ne fournit pas de moyen direct d'obtenir les adresses des valeurs d'interface (en dehors de l'utilisation du package non sécurisé).

Si vous avez besoin de pointeurs vers des structures stockées dans une liste, envisagez de stocker des pointeurs vers les structures elles-mêmes plutôt que vers les structures directement. Alternativement, vous pouvez utiliser les valeurs *list.Element comme références aux structures contenues.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!