Maison > Article > développement back-end > Pourquoi ne puis-je pas prendre l'adresse d'une valeur intégrée dans une interface Go ?
Dans Go, une interface représente un ensemble de méthodes qu'un type doit implémenter. Lorsqu'un type implémente les méthodes déclarées par une interface, cela signifie qu'il peut participer à cette interface.
Le stockage d'une valeur d'un type spécifique dans une instance d'interface implique le concept d'incorporation de type. La valeur de l'interface se compose de deux composants : la valeur du type intégré et un pointeur vers la définition du type.
Considérez l'exemple suivant :
<code class="go">import "container/list" type Retry struct{} func main() { el := list.New().Front() el.Value = Retry{} p := &el.Value.(Retry) // Attempt to take the address of the embedded value }</code>
Cependant, vous pouvez rencontrer une erreur :
cannot take the address of el.Value.(Retry)
Comprendre l'erreur
Cette erreur se produit car Go interdit de prendre l'adresse des valeurs intégrées dans les interfaces. Cette restriction provient de la manière dont Go gère les valeurs de l'interface.
Lorsqu'une variable d'interface est créée, elle alloue deux mots de mémoire. Le premier mot stocke les informations de type de la valeur intégrée et le deuxième mot contient la valeur elle-même ou un pointeur vers la valeur, en fonction de sa taille.
L'attribution d'une nouvelle valeur à une variable d'interface peut réutiliser le stockage. alloué pour la valeur précédente. Ce mécanisme garantit une gestion efficace de la mémoire mais pose un défi lorsqu'on tente de prendre l'adresse d'une valeur incorporée. Si le stockage est réutilisé pour une nouvelle valeur, le pointeur vers la valeur précédente devient invalide.
Conséquences et alternatives
Cette restriction a des implications importantes :
Si vous avez besoin d'accéder au adresse de la valeur intégrée, envisagez les alternatives suivantes :
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!