Maison > Article > développement back-end > Comment obtenir le nom d'une fonction à l'aide de Go Reflection ?
Comprendre la réflexion dans Go : récupérer les noms de fonctions
Dans le système de réflexion de Go, récupérer le nom d'une fonction n'est pas aussi simple qu'il le pourrait. sembler. Le comportement attendu, dans certains scénarios, est d'obtenir une chaîne vide lors de l'appel de la méthode Name.
Chaîne vide inattendue :
Lors de l'utilisation de l'extrait de code suivant, le nom méthode renvoie une chaîne vide :
package main import "fmt" import "reflect" func main() { typ := reflect.TypeOf(main) name := typ.Name() fmt.Println("Name of function: " + name) }
Dans cet exemple, nous tentons de récupérer le nom de la fonction principale en utilisant la réflexion. Cependant, la sortie indique « Nom de la fonction : », indiquant un nom vide.
Solution utilisant runtime.FuncForPC :
La clé pour résoudre ce problème réside dans l'utilisation la fonction runtime.FuncForPC. Cette fonction renvoie un pointeur vers un type Func, qui fournit des informations supplémentaires sur la fonction, y compris son nom.
package main import "fmt" import "reflect" import "runtime" func main() { name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name() fmt.Println("Name of function: " + name) }
Maintenant, le résultat sera "main.main", qui reflète avec précision le nom du fonction. Si vous souhaitez extraire uniquement le nom de la fonction sans le nom du package, vous pouvez diviser la chaîne à l'aide de la fonction strings.SplitN.
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!