Maison > développement back-end > Golang > Pourquoi « reflect.Value.FieldByName » panique-t-il lorsqu'il est appelé sur une valeur de pointeur ?

Pourquoi « reflect.Value.FieldByName » panique-t-il lorsqu'il est appelé sur une valeur de pointeur ?

Mary-Kate Olsen
Libérer: 2024-11-03 22:00:31
original
535 Les gens l'ont consulté

Why does `reflect.Value.FieldByName` panic when called on a pointer value?

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)
Copier après la connexion

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!

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