Maison > développement back-end > Golang > Comment puis-je modifier le type de pointeur et la valeur d'une variable d'interface à l'aide de la réflexion dans Go ?

Comment puis-je modifier le type de pointeur et la valeur d'une variable d'interface à l'aide de la réflexion dans Go ?

DDD
Libérer: 2024-11-17 11:05:02
original
639 Les gens l'ont consulté

How can I change the pointer type and value of an interface variable using reflection in Go?

Modification du type et de la valeur du pointeur sous l'interface avec réflexion

Question

Comment pouvons-nous modifier le type et la valeur du pointeur de une variable définie par une interface utilisant réflexion ?

Réponse

Dans Go, tout est passé par valeur, y compris les interfaces. Lors de l'attribution d'une valeur d'interface, une copie est effectuée, limitant le potentiel de modification.

Pour modifier la valeur stockée dans une variable d'interface, il faut utiliser son adresse. En accédant à l'adresse de la variable via Reflect.ValueOf(&varName).Elem(), nous pouvons y définir une nouvelle valeur de pointeur.

Exemple

var a fmt.Stringer // Interface variable
a = &Greeter{"John"}

v := reflect.ValueOf(&a).Elem() // Access variable's address
v.Set(reflect.ValueOf(&Greeter2{"Jack"})) // Set new pointer value

fmt.Println(a.String()) // Hello2, My name is Jack (Greeter2.String() called)
Copier après la connexion

Points clés

  • Partez de l'adresse en utilisant Reflect.ValueOf(&varName).
  • Définissez-y une valeur de pointeur, car les interfaces implémentées par des pointeurs ne peuvent pas être définies dans des copies.

Limitations

  • Modifier une copie est impossible en raison de la nature de passage par valeur de Go. Ce n'est qu'en passant un pointeur que la valeur pointée peut être modifiée, modifiant ainsi effectivement la valeur de la variable.
  • Changer le type d'interface d'une variable n'est pas possible, car le type réel de la variable est déterminé au moment de la compilation.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal