我似乎有这个答案并使用@OneOfOne 答案。 你如何让 Golang 程序打印它刚刚调用的错误的行号?
但是有一些问题。
func FancyHandleError(err error) (b bool) {
if err != nil {
pc, fn, line, _ := runtime.Caller(1)
log.Printf("[error] in %s[%s:%d] %v", runtime.FuncForPC(pc).Name(), fn, line, err)
b = true
}
return
}
func main(){
FancyHandleError?funcA())
}
func funcA()error{
err := funcB()
return err
}
func funcB()error{
err := funcC()
return err
}
func funcC()error{
err := errors.New("deep errors!!") //I want to get the location in here!!!!!!!!!!!!!!!!!!!!!!
return err
}
Run Code Online (Sandbox Code Playgroud)
它将打印“ [error] in main.main[/root/temp/error.go:23] ”,这是在函数 main 的行号中。
但是如何在函数 C() 中定位错误的行号?
请参阅runtime.Caller,它将为您提供所需的所有详细信息。
您的自定义NewError函数可能如下所示:
func NewError(message string) error {
_, file, line, _ := runtime.Caller(1)
return fmt.Errorf("[%s][%d] : %s" , file, line, message)
}
Run Code Online (Sandbox Code Playgroud)
这是示例播放的播放链接