Maison  >  Article  >  développement back-end  >  Comment obtenir le nom d'une fonction à l'aide de Go Reflection ?

Comment obtenir le nom d'une fonction à l'aide de Go Reflection ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 20:45:02979parcourir

How to Obtain the Name of a Function Using 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!

Déclaration:
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