panic
异常指的是不应该出现问题的地方出现了问题
例如:引用空指针、数组下标越界、除数为零。
使用panic
抛出异常,抛出异常后将立即停止当前函数的执行并运行所有被defer
的函数,然后将panic
抛向上一层,直至程序carsh
。但是也可以使用被defer
的recover
函数来捕获异常阻止程序的崩溃,recover
只有被defer
后才是有意义的。
对于异常,我们可以选择在一个合适的上游去recover
,并打印堆栈信息,使得部署后的程序不会终止。
异常处理
1.程序开发阶段:坚持速错,让它挂掉
2.程序部署阶段:Goroutine
如果panic
了,并且没有recover
,那么整个Golang
进程就会异常退出。所以,一旦Golang
程序部署后,在任何情况下发生的异常都不应该导致程序异常退出,我们在上层函数中加一个延迟执行的recover
调用来达到这个目的,并且是否进行recover
需要根据环境变量或配置文件来定,默认需要recover
。
响应异常
- 打印堆栈的异常调用信息和关键的业务信息,以便这些问题保留可见。
- 将异常转换为错误,以便调用者让程序恢复到健康状态并继续安全运行