如何准确标记错误以符合golang

har*_*ldT -3 go

我似乎有这个答案并使用@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() 中定位错误的行号?

Sar*_*lai 5

请参阅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)

这是示例播放的播放链接