【问题标题】:Where to `Exit(1)` and where to return error?在哪里“退出(1)”以及在哪里返回错误?
【发布时间】:2017-06-14 05:09:14
【问题描述】:

处理程序层深处发生的错误的惯用方法是什么?如果我在包裹深处的某处有这样的 sn-p:

file, err := os.Open(path)
if err != nil {            
    os.Exit(1) // or return errors.New("The path is invalid.")
}                          

我是否应该立即返回一个错误并可能将其拖过多个层,其中if {} else {} 块最多达到mainExit 中的mainExit

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

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

【问题讨论】:

    标签: go error-handling idioms


    【解决方案1】:

    基本上,您最好在适当的位置处理错误,而不是通过药物处理。当您需要立即退出时,您也可以致电os.Exit()。你忘记了另一个选择 - panic()。它通过并评估延迟函数,允许您进行一些拆卸。在编写程序包时,不建议调用os.Exit()panic(),以免将用户与不可预测混淆。在包中宣传错误是最好的选择。

    【讨论】:

      猜你喜欢
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      相关资源
      最近更新 更多