Introspektion des Go-Codes: Abrufen des aktuellen Funktionsnamens
In Go ist das Abrufen des aktuellen Funktionsnamens für das Debuggen und Tracing von entscheidender Bedeutung. Das Makro FUNCTION in gcc stellt diese Funktionalität bereit, und wir möchten sie in Go emulieren.
Lösung
Der Schlüssel liegt im Laufzeitpaket. Hier ist eine Lösung:
import ( "fmt" "runtime" ) func trace() { pc := make([]uintptr, 10) // Need at least 1 entry runtime.Callers(2, pc) f := runtime.FuncForPC(pc[0]) file, line := f.FileLine(pc[0]) fmt.Printf("%s:%d %s\n", file, line, f.Name()) }
Diese Funktion funktioniert wie folgt:
Aktualisiertes Beispiel
Für Go-Versionen 1.7 ist die empfohlene Vorgehensweise die Verwendung runtime.CallersFrames anstelle von runtime.FuncForPC. Ein aktualisiertes Beispiel unten:
import ( "fmt" "runtime" ) func trace() { pc := make([]uintptr, 10) // Need at least 1 entry runtime.CallersFrames(2, pc) frame, _ := runtime.CallersFrames(2, pc) fmt.Printf("%s:%d %s\n", frame[0].File, frame[0].Line, frame[0].Function) }
Das obige ist der detaillierte Inhalt vonWie kann ich den aktuellen Funktionsnamen im Go-Code abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!