9. 宕机

go语言会在编译时捕获很多错误信息,但有些错误只能在运行时检查,如数组越界,空指针引用等问题,都会引发宕机问题, 宕机不是,可能造成体验停止、服务中断,就像没有人希望在取钱时遇到 ATM 机蓝屏一样,但是,如果在损失发生时, 程序没有因为宕机而停止,那么用户将会付出更大的代价,这种代价可以是金钱、时间甚至生命,因此,宕机有时也是一种合理的止损方法。

package main
func main() {
    panic("crash")
}

9.1. recover

panic 和 recover 的组合有如下特性:

  • 有 panic 没 recover,程序宕机。
  • 有 panic 也有 recover,程序不会宕机,执行完对应的 defer 后,从宕机点退出当前函数后继续执行。