Maison > Article > développement back-end > Pourquoi « reflect.Value.FieldByName » panique-t-il lorsqu'il est appelé sur une valeur de pointeur ?
Reflect.Value.FieldByName provoquant une panique
La méthode .FieldByName d'une valeur réfléchie génère une panique lorsqu'elle est appelée sur une valeur de pointeur. Le message d'erreur « reflect : call of reflex.Value.FieldByName on ptr Value » est généré lorsque la valeur fournie est un pointeur vers une structure plutôt que la structure elle-même.
Dans le code fourni, la ligne "s := reflex.ValueOf(&value).Elem()" crée un pointeur vers la structure de valeur puis la déréférence en utilisant Elem(), ce qui est inutile. Au lieu de cela, pour accéder et modifier les champs de la structure, utilisez "s := reflex.ValueOf(value).Elem()".
L'extrait de code corrigé suivant élimine la panique :
s := reflect.ValueOf(value).Elem() metric := s.FieldByName(subval.Metric).Interface() fmt.Println(metric)
En réfléchissant directement à la valeur de la structure au lieu de créer un pointeur inutile, vous pouvez accéder et manipuler ses champs correctement sans paniquer.
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!