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

Wie kann ich Anruferfunktionsinformationen in Go abrufen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-20 08:56:11862Durchsuche

How Can I Retrieve Caller Function Information in Go?

Abrufen von Informationen zur Anruferfunktion in Go

Es ist möglich, Informationen über die Anruferfunktion in Go abzurufen. Dadurch können Sie den Aufrufstapel verfolgen, den Aufrufkontext identifizieren und verschiedene Debugging- oder Profiling-Vorgänge durchführen.

Runtime.Caller verwenden

Die primäre Methode zum Abrufen von Anruferinformationen ist runtime.Caller Funktion. Es benötigt ein ganzzahliges Argument, das die Anzahl der zu überspringenden Stapelrahmen angibt, bevor die Informationen abgerufen werden. Standardmäßig wird ein Frame übersprungen und Daten über den unmittelbaren Aufrufer bereitgestellt.

Die runtime.Caller-Funktion gibt einen uintptr zurück, eine Zeichenfolge, die den Dateipfad darstellt, eine Ganzzahl, die die Zeilennummer darstellt, und einen booleschen Wert, der angibt, ob der Der Abruf war erfolgreich.

Beispiel: Anruferdatei und Leitungsnummer abrufen

Zur Veranschaulichung des Abrufens des Anruferdateinamens und Zeilennummer:

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: Abrufen weiterer Informationen mit runtime.FuncForPC

Für detailliertere Informationen können Sie runtime.FuncForPC verwenden, um ein *Func-Objekt abzurufen, das die Aufruferfunktion darstellt. Dieses Objekt bietet Zugriff auf zusätzliche Daten, wie den Funktionsnamen und den Paketpfad.

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

Mit diesen Methoden können Sie problemlos Informationen über die Aufruferfunktion in Go sammeln, die für das Debuggen und Profiling wertvoll sein können , und andere fortgeschrittene Programmierszenarien.

Das obige ist der detaillierte Inhalt vonWie kann ich Anruferfunktionsinformationen in Go abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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