Accès au nom de la fonction avec Reflection in Go
Reflection in Go permet aux développeurs d'introspecter les types et les valeurs de n'importe quelle variable. Une tâche courante consiste à récupérer le nom d'une fonction. Cependant, les tentatives d'accès à la méthode Name directement sur le type de la fonction peuvent entraîner une chaîne vide.
Comportement attendu
L'extrait de code fourni importe correctement les éléments nécessaires des paquets de réflexion. Cependant, le problème survient lorsque l'on tente de récupérer le nom de la fonction directement à partir du type.
name := typ.Name()
Cette approche ne donne pas le résultat attendu car la méthode Name opère sur le pointeur de fonction réel, pas sur le type. Pour obtenir le nom correct, la fonction FuncForPC du package d'exécution doit être utilisée.
Solution
La fonction FuncForPC prend le pointeur vers le reflet.Valeur de la fonction et renvoie un objet *Func. Cet objet fournit la méthode Name correcte, qui peut être utilisée pour récupérer le nom de la fonction.
name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
À l'aide de la démonstration fournie, le code imprimera désormais correctement "main.main". Si seul le nom de la fonction est souhaité, il peut être extrait en divisant la chaîne renvoyée.
Conclusion
En utilisant la réflexion et la fonction FuncForPC, les développeurs peuvent récupérer avec précision le nom de la fonction. nom de n’importe quelle fonction dans Go. Cette technique permet divers cas d'utilisation, tels que l'inspection de la structure du code et l'exécution d'appels de fonctions dynamiques.
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!