[go学习笔记]十七、panic和recover

204 阅读1分钟

panic

  • panic 用户不可恢复的错误
  • panic 推出前会执行 defer 指定的内容

panic vs. os.Exit

  • os.Exit 退出时不回调用 defer 指定的函数
  • os.Exit 退出时不输出当前调用栈信息

recover

Java、 C++、 .Net

try{

}catch(){

}

go语言

defer func(){
  if er := recover(); err != nill {
    // 恢复错误
  }
}()

最常见的“错误恢复”

defer func() {
  if er := recover(); err != nill {
    log.Error("recovered panic",err)
  }
}()

当心!recover 成为噩梦

  • 形成僵尸服务进程,导致 health check 失效。
  • “Let it Crash!”往往是我们恢复不确定性错误的最好方法。