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

Comment puis-je obtenir des informations sur l'appelant dans Go ?

DDD
Libérer: 2024-12-20 13:21:14
original
706 Les gens l'ont consulté

How Can I Get Caller Information in Go?

Obtention des informations sur l'appelant dans GoLang

Est-il possible de déterminer des informations sur la fonction qui a invoqué une autre fonction dans GoLang ? Si une fonction, telle que foo() ci-dessous, est appelée depuis main(), comment pouvons-nous le savoir ?

func foo() {
    // Perform some actions
}

func main() {
    foo()
}
Copier après la connexion

Bien que certains langages, tels que C#, fournissent des fonctionnalités telles que l'attribut CallerMemberName pour récupérer cette données, GoLang utilise une approche différente.

Solution : runtime.Caller

GoLang propose la fonction runtime.Caller pour acquérir des informations sur l'appelant. Voici sa syntaxe :

func Caller(skip int) (pc uintptr, file string, line int, ok bool)
Copier après la connexion

Exemple 1 : Affichage du nom du fichier de l'appelant et du 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()
}
Copier après la connexion

Exemple 2 : Collecte d'informations détaillées avec l'exécution. FuncForPC

Pour des informations plus complètes, vous pouvez utiliser runtime.FuncForPC en conjonction avec runtime.Caller :

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()
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal