Maison >développement back-end >Golang >Comment puis-je obtenir le nom de la fonction actuelle dans Go Code ?

Comment puis-je obtenir le nom de la fonction actuelle dans Go Code ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 08:45:14737parcourir

How Can I Get the Current Function Name in Go Code?

Introspection du code Go : récupération du nom de la fonction actuelle

Dans Go, l'obtention du nom de la fonction actuelle est cruciale pour le débogage et le traçage. La macro FUNCTION dans gcc fournit cette fonctionnalité, et nous visons à l'émuler dans Go.

Solution

La clé réside dans le package d'exécution. Voici une solution :

import (
    "fmt"
    "runtime"
)

func trace() {
    pc := make([]uintptr, 10) // Need at least 1 entry
    runtime.Callers(2, pc)
    f := runtime.FuncForPC(pc[0])
    file, line := f.FileLine(pc[0])
    fmt.Printf("%s:%d %s\n", file, line, f.Name())
}

Cette fonction fonctionne en :

  1. Obtention du compteur de programme (PC) :Nous utilisons runtime.Callers pour récupérer le PC de la fonction actuelle et les cadres de pile d'appels. Nous spécifions une profondeur de 2 pour ignorer la fonction de trace elle-même.
  2. Récupération des détails de la fonction : À l'aide de runtime.FuncForPC, nous récupérons l'objet Func correspondant au PC. Cet objet donne accès au nom de la fonction, au numéro de ligne et au nom de fichier.
  3. Impression des informations sur la fonction : Enfin, nous imprimons le nom de fichier, le numéro de ligne et le nom de la fonction.

Exemple mis à jour

Pour les versions Go 1.7, l'approche recommandée consiste à utiliser runtime.CallersFrames au lieu de runtime.FuncForPC. Un exemple mis à jour ci-dessous :

import (
    "fmt"
    "runtime"
)

func trace() {
    pc := make([]uintptr, 10) // Need at least 1 entry
    runtime.CallersFrames(2, pc)
    frame, _ := runtime.CallersFrames(2, pc)
    fmt.Printf("%s:%d %s\n", frame[0].File, frame[0].Line, frame[0].Function)
}

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