Anruferinformationen in GoLang abrufen
Ist es möglich, Informationen über die Funktion zu ermitteln, die eine andere Funktion in GoLang aufgerufen hat? Wie können wir das herausfinden, wenn eine Funktion, wie z. B. foo() unten, von main() aufgerufen wird?
func foo() { // Perform some actions } func main() { foo() }
Während einige Sprachen, wie z. B. C#, Funktionen wie das CallerMemberName-Attribut bereitstellen, um dies abzurufen Daten verwendet GoLang einen anderen Ansatz.
Lösung: runtime.Caller
GoLang bietet die runtime.Caller-Funktion zum Erfassen von Informationen über den Anrufer. Hier ist die Syntax:
func Caller(skip int) (pc uintptr, file string, line int, ok bool)
Beispiel 1: Name und Leitungsnummer des Anrufers anzeigen
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() }
Beispiel 2: Detaillierte Informationen mit der Laufzeit sammeln. FuncForPC
Für umfassendere Informationen können Sie verwenden runtime.FuncForPC in Verbindung mit 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() }
Das obige ist der detaillierte Inhalt vonWie kann ich Anruferinformationen in Go abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!