要增強偵錯能力,取得目前函數的名稱至關重要。與 gcc 的 FUNCTION 巨集類似,Go 提供了檢索此資訊的機制。
考慮以下函數:
func foo() { trace() }
我們的目標是讓它自動列印訊息,例如「輸入 foo()...」。
執行時間套件提供了必要的功能:
import "fmt" func trace() { pc := make([]uintptr, 10) // At least one entry required runtime.Callers(2, pc) // Get the function associated with the program counter f := runtime.FuncForPC(pc[0]) // Obtain the file name, line number, and function name file, line := f.FileLine(pc[0]) fmt.Printf("%s:%d %s\n", file, line, f.Name()) }
在此腳本中,呼叫者使用與呼叫函數關聯的程式計數器填充 pc 切片。然後,我們使用 FuncForPC 檢索與切片中第一個程式計數器關聯的函數。最後,FileLine 提供檔案名稱、行號和函數名,並列印到控制台。
以上是Go中如何取得目前函數的名稱進行偵錯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!