【发布时间】:2017-05-20 13:06:33
【问题描述】:
也许这是一种观点,或者它实际上是一个最佳实践,但我想正确地做到这一点。
考虑以下代码:
func main() {
if err := doSomething(); err != nil {
// log here and exit?
}
}
func doSomething() {
f, err := os.Open("filename.ext")
if err != nil {
// log here and return the error/exit?
}
}
我很想知道应该在哪里记录错误以及应该在哪里退出程序(假设无法恢复)。一些可能性包括:在被调用者中记录和退出;登录被调用者,返回错误,并在调用者中退出;登录被调用者,返回错误,登录调用者,然后退出。所有这些方法似乎都有好处。例如,第二种方法允许细粒度的错误消息,但仍将错误传递给调用者。但是,它会产生两条日志消息。
谢谢!
【问题讨论】:
-
将其放入日志文件或打印出来
-
dave.cheney.net/2016/04/27/… 提供了一些很好的 go 错误处理指导。
-
@captncraig 那是一篇有用的文章。看起来使用
errors.Wrap可以在返回错误时为错误提供一些上下文。我喜欢这样。
标签: logging go error-handling error-logging