如何防止未处理的恐慌使我的申请进程崩溃

How to prevent unhandled panic from crashing my application process

提问人:Siva 提问时间:6/16/2023 最后编辑:Jonathan HallSiva 更新时间:6/20/2023 访问量:97

问:

我想要一种机制,通过该机制,任何未经处理的恐慌(来自 Go 代码)都不会使我的申请流程瘫痪。目前,我的golang代码引发的任何下游恐慌都会冻结/崩溃我的应用程序。如何正常处理所有紧急情况,同时仍继续为客户端应用程序提供服务?

恐慌

评论

2赞 Cerise Limón 6/16/2023
未恢复的死机将终止应用程序。如果您的应用程序冻结,则会发生其他事情。Effective Go 描述了如何从恐慌中恢复。
2赞 Volker 6/16/2023
“一种机制,通过这种机制,任何未经处理的恐慌 [...]不会降低我的申请”。根据“未处理的恐慌”的定义,这种机制并不存在:未经处理的恐慌旨在使应用程序瘫痪。
2赞 Hymns For Disco 6/16/2023
必须为程序中的每个 goroutine 显式实现 panic recovery。

答:

-1赞 Abhishek Mali 6/16/2023 #1
//You could use defer-recovery to handle all possible panic's 
func handelPanic(){
 if recoverPanic := recovery();recoverPanic != nil{
  fmt.Println("Panic is being recovered...")
   //Call function which you want to restart after panic is being recovered
 }
}    

func main() {
 defer handlePanic()
 //some code that needs to check err
 if err != nil{
     panic(err)
 }
}

上面的以下代码将简单地处理所有恐慌,如果在 defer 内的 main 函数中使用恢复。

评论

0赞 Community 6/18/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。