一尘不染

Golang惊慌失事预防

go

在Golang中,没有恢复的紧急情况会使进程崩溃,因此我最终将以下代码片段放在每个函数的开头:

defer func() {
    if err := recover(); err != nil {
        fmt.Println(err)
    }
}()

只是为了防止我的程序崩溃。现在我想知道,这真的是要走的路吗?因为我认为到处都放置相同的代码看起来有些奇怪。

在我看来,以Java的方式将异常冒泡到调用函数之前,直到main函数是控制异常/恐慌的更好方法为止。我了解这是Go的设计,但是像Go一样立即使过程崩溃的好处是什么?


阅读 252

收藏
2020-07-02

共1个答案

一尘不染

如果您完全知道原因,则应该只从恐慌中恢复过来。在两种情况下,Go程序会惊慌:

  • 程序逻辑错误(例如nil指针取消引用或越界数组或切片访问)
  • panic(...)代码或代码调用中的故意恐慌(称为使用)

在第一种情况下,崩溃是适当的,因为这意味着您的程序已进入错误状态并且不应继续执行。在第二种情况下,仅应在惊慌中恢复。解释这一点的最好方法就是说它非常罕见,如果您看到它,您就会知道。我几乎肯定地说,无论您编写什么代码,都无需从恐慌中恢复过来。

2020-07-02