我认为panic
与异常不同。您可以处理异常并继续运行例程。而恐慌导致终止当前例程,您不能跳过它。
异常通常由操作系统发出并导致运行相关例程。相反,恐慌由程序员手动发出并导致退出goroutine
。
您可以为函数中的每段代码定义多个异常。恐慌恢复机制适用于整个功能。
异常被设计为被处理,而 Panic 被设计为终止和恐慌恢复机制似乎只是控制终止的一个技巧。
所以异常处理与错误处理是可比的。
但是如何在 Golang 中利用它呢?
我将描述我的用例来回答您的问题。
有两种类型的阻塞错误,Panic 和 Fatal。您无法从致命错误中恢复。
有时您需要终止该进程。但有时您需要重新启动它。
我使用recover()
了从恐慌错误中恢复的机制,以关闭当前的 goroutine 并重新启动主要功能。
所以我必须小心错误类型。某些情况需要发出致命错误,例如缺少必要的配置文件。有时重启应用程序是合理的。考虑一下您希望在崩溃后重新启动应用程序的所有情况。如:
- 服务超载(导致 DoS)
- 缺少数据库管理系统
- 来自其他使用过的 go 包的意外错误
imagick
例如崩溃过程
- 等等
所以,
recover()
对我来说是非常有益的。它使您有机会在退出之前清楚地关闭该过程。
旁注:您可以开发一个引导程序应用程序,它将主应用程序作为分离进程运行。如果该进程异常退出,它必须重新运行主应用程序。
使用日志记录以便在保持应用运行的同时进行调试。