Maison > développement back-end > Golang > Pourquoi ne puis-je pas obtenir les noms de paramètres à partir de « reflect.TypeOf » de Go ?

Pourquoi ne puis-je pas obtenir les noms de paramètres à partir de « reflect.TypeOf » de Go ?

Barbara Streisand
Libérer: 2024-12-21 18:22:11
original
208 Les gens l'ont consulté

Why Can't I Get Parameter Names from Go's `reflect.TypeOf`?

Réflexion sur les noms de paramètres dans Go

On souhaite souvent déterminer les noms de paramètres d'une méthode Go. Cependant, après avoir tenté d'obtenir ces informations via la fonction TMethod, un utilisateur découvre que seul le nom de la structure est renvoyé (testData dans ce cas).

Comprendre l'absence de noms de paramètres

Dans Go, les noms des paramètres de méthode ou de fonction ne sont pas explicitement stockés dans les informations d'exécution. En effet, les noms des paramètres ne sont pas considérés comme cruciaux pour l'appelant de la méthode ou de la fonction. L'accent est mis sur les types de paramètres et leur ordre.

Deux fonctions avec les mêmes types de paramètres et de résultats ont des types identiques, quels que soient leurs noms de paramètres. Par exemple :

func f1(a int) {}
func f2(b int) {}

fmt.Println(reflect.TypeOf(f1) == reflect.TypeOf(f2)) // Prints true
Copier après la connexion

Approches alternatives pour la dénomination des paramètres

Si la fonctionnalité souhaitée est de créer un cadre pour appeler des fonctions avec des paramètres « nommés », des approches alternatives existent :

  • Utilisation de structures : Les champs nommés peuvent être obtenus à l'aide des réflexions Méthodes Value.FieldByName() et Type.FieldByName().
  • Utilisation de cartes : Les valeurs des paramètres peuvent être mappées sur leurs noms respectifs.

Informations complémentaires

Pour des informations plus détaillées et des exemples, reportez-vous à ce qui suit ressources :

  • [Les arguments sans nom sont-ils une chose dans Go ?](https://stackoverflow.com/questions/72503238/is-unnamed-arguments-a-thing-in-go)
  • [Fonction d'initialisation field](https://stackoverflow.com/questions/47924187/initialize-function-fields)
  • [Discussion pertinente sur la liste de diffusion golang-nuts](https://groups.google.com/g/ golang-nuts/c/wlyXOha-asQ)

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