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