參考資料
實現代碼保存在我的github
// input flag 1:FunName 2:CallerFunName
func GetFuncName(flag int) string {
if flag != 1 && flag != 2 {
flag = 1
}
pc, _, _, _ := Caller(flag)
return FuncForPC(pc).Name()
}
測試代碼
func main() {
test()
}
func test{
fmt.Println(runtime.GetFuncName(1), runtime.GetFuncName(2), runtime.GetFuncName(3))
}
輸出
main.test main.main main.test
1 為函數名,2 為 調用者名,3 未識別的調用,設置成1
其實0 就是函數本身 GetFuncName,為一個函數調用棧