Maison >développement back-end >Golang >Comment puis-je obtenir le nom d'une fonction Go au moment de l'exécution ?

Comment puis-je obtenir le nom d'une fonction Go au moment de l'exécution ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 14:58:13192parcourir

How Can I Get a Go Function's Name at Runtime?

Comment récupérer les noms de fonctions dans Go

Il est souvent souhaitable d'obtenir le nom d'une fonction dans Go pendant l'exécution. Cela peut être utile à des fins de débogage, de journalisation ou d'autres tâches de métaprogrammation.

runtime.FuncForPC : une solution native

Go fournit une fonction intégrée, le runtime. FuncForPC, qui peut récupérer le nom d'une fonction à partir de son adresse PC (Program Counter). Cependant, cela nécessite une réflexion pour obtenir l'adresse du PC, ce qui peut être fastidieux.

Une approche simplifiée

Pour simplifier le processus, une solution simple utilisant la réflexion et le runtime. FuncForPC peut être implémenté :

package main

import (
    "fmt"
    "reflect"
    "runtime"
)

func foo() {
}

func GetFunctionName(i interface{}) string {
    return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}

func main() {
    fmt.Println("name:", GetFunctionName(foo))
}

Cette fonction accepte un paramètre d'interface générique i et renvoie le nom de la fonction associée à cette interface. Dans ce cas, foo est la fonction dont le nom est récupéré.

Exemple d'utilisation

L'exemple suivant montre l'utilisation de la fonction GetFunctionName :

package main

import (
    "fmt"
)

func foo() {
}

func main() {
    fmt.Println("name:", GetFunctionName(foo))
}

Lorsque vous exécutez ce programme, il affichera :

name: foo

Cela confirme que la fonction GetFunctionName récupère avec succès le nom de la fonction foo.

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