在java应用里面,如果出现了报错异常信息,我们经常可以直接在控制台或者日志文件中通过异常的反馈信息,精准的找到哪一个文件,哪一行代码导致的报错。这样子在实际解决问题的过程中极大的方便了开发者。那么在go里面有没有这样的形式方便我们快速定位到具体的错误发生在哪个文件,哪行代码里面呢?
答案是有的,就是使用第三方的github.com/pkg/errors来打印错误信息,就可以直接显示具体的错误堆栈信息,让我们快速定位到哪一个文件,哪一行代码出现的报错。打印的效果图是:
是不是和java的异常信息是差不多的。那我们如何实现呢?其实主要是使用github.com/pkg/errors的errors对象进行WithStack方法进行包装。即如果我们在写代码的时候,经常会涉及到判断
if err != nil { xxxxx }
在这里我们只需要使用WithStack方法进行包装即可,例如:
func OpenFile() error { _, err := os.Open("abc") if err != nil { err = errors.WithStack(err) // 对err进行包装,附带堆栈信息处理。 return err } return nil}
包装完成之后,在其他地方需要处理错误的时候,可以直接打印信息即可,例如:
fmt.Println(fmt.Sprintf("%+v", err))
这样子就会打印出错误的堆栈信息,方便我们快速定位排查问题。
备注:
1、不是所有的err都有堆栈信息,所以有时候即使包装了err也打印不出来堆栈信息,这时候只能靠具体的情况进行排查了。
还没有评论,来说两句吧...