在哪里`退出(1)`以及返回错误的位置?

时间:2017-01-28 16:46:47

标签: go error-handling idiomatic

处理程序层深处发生的错误的惯用方法是什么?如果我在一个包内深处有这样一个片段:

x[i], y[i] = meteorites()

我是否应该立即返回错误并将其拖动到file, err := os.Open(path) if err != nil { os.Exit(1) // or return errors.New("The path is invalid.") } if {} else {}main以及Exit的多个图层中?

立即main代码看起来更干净,更易读。但有时很难测试。返回和检查代码看起来更糟(在我看来),但更容易测试并达到100%的覆盖率。

还有一个问题......如果我正在编写一个包并且没有Exit函数,我应该将Exit留给“用户”程序并返回错误吗?

1 个答案:

答案 0 :(得分:1)

基本上你最好处理错误,而不是通过药物。当您需要立即退出时,请致电os.Exit()。你忘了另一个选择 - panic()。它通过并评估延迟功能,允许你一些拆解。在撰写程序包时,建议不要致电os.Exit()panic(),以免混淆不可预测的用户。在推广错误的包中是最好的选择。