Détermination du nom du champ de structure à l'aide de la réflexion
Dans Go, il est possible d'accéder et de manipuler les champs de structure de manière dynamique à l'aide de la réflexion. Cependant, un défi courant consiste à déterminer le nom d'un champ de structure particulier.
Considérons l'exemple 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 ce code, un pointeur vers une structure A est créé et le la valeur est accessible en utilisant la réflexion. Cependant, fmt.Println(val.Field(0).Type().Name()) imprime "string" au lieu de "Foo".
Solution
Pour récupérer le nom d'un champ, vous devez utiliser Field(0).Name au lieu de Type().Name(). Le code suivant montre comment procéder :
fmt.Println(val.Field(0).Name())
La méthode Name sur réflexion.StructField fournit le nom réel du champ, qui est "Foo".
Autres considérations
Il est important de noter que Field(0) fait référence au premier champ de la structure. Si vous avez besoin d'obtenir le nom d'un champ spécifique, vous pouvez utiliser son index.
De plus, il n'existe aucun moyen de récupérer le nom du champ pour une réflexion.Valeur représentant une valeur de champ particulière. Ces informations ne sont pas stockées dans la valeur du champ elle-même mais plutôt dans 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!