在Golang中,没有恢复的紧急情况会使进程崩溃,因此我最终将以下代码片段放在每个函数的开头:
defer func() { if err := recover(); err != nil { fmt.Println(err) } }()
只是为了防止我的程序崩溃。现在我想知道,这真的是要走的路吗?因为我认为到处都放置相同的代码看起来有些奇怪。
在我看来,以Java的方式将异常冒泡到调用函数之前,直到main函数是控制异常/恐慌的更好方法为止。我了解这是Go的设计,但是像Go一样立即使过程崩溃的好处是什么?
如果您完全知道原因,则应该只从恐慌中恢复过来。在两种情况下,Go程序会惊慌:
panic(...)
在第一种情况下,崩溃是适当的,因为这意味着您的程序已进入错误状态并且不应继续执行。在第二种情况下,仅应在惊慌中恢复。解释这一点的最好方法就是说它非常罕见,如果您看到它,您就会知道。我几乎肯定地说,无论您编写什么代码,都无需从恐慌中恢复过来。