Maison >développement back-end >Golang >Comment puis-je récupérer les informations sur la fonction de l'appelant dans Go ?

Comment puis-je récupérer les informations sur la fonction de l'appelant dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 08:56:11862parcourir

How Can I Retrieve Caller Function Information in Go?

Récupération des informations sur la fonction de l'appelant dans Go

Il est possible d'obtenir des informations sur la fonction de l'appelant dans Go. Cela vous permet de suivre la pile d'appels, d'identifier le contexte d'appel et d'effectuer diverses opérations de débogage ou de profilage.

Utilisation de runtime.Caller

La principale méthode pour récupérer les informations sur l'appelant est le runtime.Caller fonction. Il faut un argument entier indiquant le nombre de frames de pile à ignorer avant de récupérer les informations. Par défaut, il saute une image, fournissant des données sur l'appelant immédiat.

La fonction runtime.Caller renvoie un uintptr, une chaîne représentant le chemin du fichier, un entier représentant le numéro de ligne et un booléen indiquant si le la récupération a réussi.

Exemple : obtention du fichier de l'appelant et du numéro de ligne

Pour démontrer la récupération du nom du fichier de l'appelant et du numéro de ligne. numéro de ligne :

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    _, file, no, ok := runtime.Caller(1)
    if ok {
        fmt.Printf("called from %s#%d\n", file, no)
    }
}

func main() {
    foo()
}

Exemple : Récupération de plus d'informations avec runtime.FuncForPC

Pour des informations plus détaillées, vous pouvez utiliser runtime.FuncForPC pour obtenir un objet *Func représentant la fonction appelante. Cet objet donne accès à des données supplémentaires, telles que le nom de la fonction et le chemin du package.

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    pc, _, _, ok := runtime.Caller(1)
    details := runtime.FuncForPC(pc)
    if ok & details != nil {
        fmt.Printf("called from %s\n", details.Name())
    }
}

func main() {
    foo()
}

Avec ces méthodes, vous pouvez facilement collecter des informations sur la fonction appelante dans Go, ce qui peut être utile pour le débogage, le profilage , et d'autres scénarios de programmation avancés.

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