Heim > Backend-Entwicklung > Golang > Wie kann ich Anruferinformationen in Go abrufen?

Wie kann ich Anruferinformationen in Go abrufen?

DDD
Freigeben: 2024-12-20 13:21:14
Original
708 Leute haben es durchsucht

How Can I Get Caller Information in Go?

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()
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage