Énoncé du problème :
Considérez le code Golang suivant :
type A struct { Foo string } func (a *A) PrintFoo() { fmt.Println("Foo value is " + a.Foo) } func main() { a := &A{Foo: "afoo"} val := reflect.Indirect(reflect.ValueOf(a)) fmt.Println(val.Field(0).Type().Name()) }
Dans cet exemple, le code imprime "string", pas "Foo". Comment pouvons-nous récupérer le nom du champ "Foo" en utilisant la réflexion dans ce contexte ?
Réponse :
Pour récupérer le nom du champ, utilisez le Type().Field( 0).Name méthode sur la réflexion.Value. Cette méthode renvoie le nom du type du champ, qui dans ce cas est « Foo ». Le code corrigé suivant le démontre :
fmt.Println(val.Type().Field(0).Name()) // Prints "Foo"
Explication :
La fonction Indirect déréférence le pointeur a. La méthode Type().Field(0) récupère les informations du champ de structure pour le premier champ et Name() extrait le nom du champ. Notez qu'il n'y a aucun moyen de récupérer directement le nom du champ pour un reflet.Value, puisque ces informations sont associées à la structure contenant.
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!