內省 Go 程式碼:擷取目前函數名稱
在 Go 中,取得目前函數名稱對於除錯和追蹤至關重要。 gcc 中的 FUNCTION 巨集提供了這個功能,我們的目標是在 Go 中模擬它。
解決方案
關鍵在於運行時包。這是一個解決方案:
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()) }
這個函數的工作原理是:
更新的範例
對於 Go 版本 1.7 ,建議的方法是使用runtime.CallersFrames而不是runtime.FuncForPC。以下是更新的範例:
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) }
以上是如何取得Go程式碼中目前的函數名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!