我似乎有这个答案,并使用@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()中找到错误的行号?
答案 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
套餐,则可以指示logger
至prefix the entries with various information。
log.SetFlags(log.Lshortfile)