Maison > Article > développement back-end > Pourquoi ne puis-je pas obtenir l'adresse d'une valeur stockée dans une interface Go ?
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>
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!