处理程序层深处发生的错误的惯用方法是什么?如果我在一个包内深处有这样一个片段:
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
留给“用户”程序并返回错误吗?
答案 0 :(得分:1)
基本上你最好处理错误,而不是通过药物。当您需要立即退出时,请致电os.Exit()
。你忘了另一个选择 - panic()
。它通过并评估延迟功能,允许你一些拆解。在撰写程序包时,建议不要致电os.Exit()
或panic()
,以免混淆不可预测的用户。在推广错误的包中是最好的选择。