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

Pouvez-vous prendre l'adresse d'une valeur dans une interface dans Go ?

Barbara Streisand
Libérer: 2024-10-31 02:53:31
original
997 Les gens l'ont consulté

 Can You Take the Address of a Value Inside an Interface in Go?

Prendre l'adresse d'une valeur à l'intérieur d'une interface

Dans le contexte du langage de programmation Go, une interface agit comme un contrat, définissant un ensemble des méthodes qu’un type doit implémenter. Lorsqu'une valeur est affectée à une interface, elle est enveloppée dans une valeur d'interface. Cependant, la valeur de l'interface elle-même ne stocke pas la valeur réelle mais contient une référence à celle-ci.

Par conséquent, tenter de prendre l'adresse d'une valeur à l'intérieur d'une interface à l'aide de l'opérateur & entraînera une erreur, comme démontré. dans l'extrait de code suivant :

<code class="go">import "container/list"

type retry struct{}

var el = list.Element{Value: retry{}}

p := &el.Value.(retry) // Compilation error: cannot take the address of el.Value.(retry)</code>
Copier après la connexion

Cette erreur provient du fait que la valeur à l'intérieur de l'interface appartient à la valeur de l'interface elle-même, et son stockage peut être réutilisé lorsqu'une nouvelle valeur est attribuée à l'interface . Modifier la valeur à l'adresse obtenue affecterait directement la valeur de l'interface, ce qui n'est pas souhaitable et pourrait conduire à un comportement inattendu.

Pour résoudre cette situation, il existe des approches alternatives disponibles :

Stocker des pointeurs au lieu de valeurs :
Au lieu de stocker les valeurs de structure directement dans l'interface, on peut stocker des pointeurs vers ces structures. Cela garantit que le pointeur reste valide même si la valeur de l'interface change.

Utiliser les références d'éléments :
Une autre option consiste à transmettre les valeurs *list.Element comme références aux structures contenues. Cela fournit effectivement un accès indirect aux valeurs de la structure sans violer la sécurité des types de Go.

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!