处理发生在程序层深处的错误的惯用方法是什么?如果我在包的深处某处有这样的片段:
file, err := os.Open(path)
if err != nil {
os.Exit(1) // or return errors.New("The path is invalid.")
}
我是否应该返回一个错误并可能将它拖过几层 if {} else {}
block 直到 main
和 Exit
在 main
或 Exit
立即?
使用立即Exit
代码看起来更清晰、更易读。但有时很难测试。使用返回和检查代码看起来更糟(在我看来),但它更容易测试并达到 100% 的覆盖率。
还有一个问题...如果我正在编写一个包并且它没有 main
函数,我应该将 Exit
留给“用户”程序并且只是返回错误?
最佳答案
基本上,您最好就地处理错误,而不是通过药物来解决。当您需要立即退出时,您也可以调用 os.Exit()
。你忘记了另一个选项 - panic()
。它遍历并评估延迟函数,允许您进行一些拆解。在编写程序包时,不建议调用 os.Exit()
或 panic()
以免让用户产生不可预测的混淆。在包中促进错误是最好的选择。
关于go - `Exit(1)` 到哪里,哪里返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912264/