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
801 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 ?

1

2

3

4

5

6

7

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 :

1

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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!

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