Maison >développement back-end >Golang >Comment puis-je obtenir des informations sur la fonction de l'appelant dans Golang ?

Comment puis-je obtenir des informations sur la fonction de l'appelant dans Golang ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 05:50:32485parcourir

How Can I Get Caller Function Information in Golang?

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

Dans Golang, il est possible d'obtenir des informations sur la fonction de l'appelant. Considérez l'extrait de code suivant :

func foo() {
    // Do something
}

func main() {
    foo()
}

La question se pose : comment pouvons-nous déterminer que foo a été invoqué depuis main ? D'autres langages, tels que C#, facilitent cette tâche en utilisant des attributs tels que CallerMemberName.

Heureusement, Golang fournit une solution avec la fonction runtime.Caller.

func Caller(skip int) (pc uintptr, file string, line int, ok bool)

Exemples d'implémentation

Exemple n°1 : Impression du nom et de la ligne du fichier de l'appelant Number

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 n°2 : Récupération de plus d'informations avec runtime.FuncForPC

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()
}

En utilisant ces exemples, vous pouvez facilement obtenir un aperçu de informations sur la fonction de l'appelant dans Go.

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