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)
Points clés
Limitations
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!