如何将错误标记为与golang一致的错误

时间:2016-12-28 08:15:39

标签: go

我似乎有这个答案,并使用@OneOfOne答案。 How do you get a Golang program to print the line number of the error it just called?

但是有一些问题。

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
}

它将在main.main中打印" [错误] [/root/temp/error.go:23] " 这是功能主要的行号。

但是如何在函数C()中找到错误的行号?

2 个答案:

答案 0 :(得分:4)

请参阅runtime.Caller,它将为您提供所需的所有详细信息。

您的自定义NewError功能可能如下所示:

func NewError(message string) error {
    _, file, line, _ := runtime.Caller(1)
    return fmt.Errorf("[%s][%d] : %s" , file, line, message)
}

以下是示例play

的播放链接

答案 1 :(得分:0)

如果您使用log套餐,则可以指示loggerprefix the entries with various information

log.SetFlags(log.Lshortfile)