recover

崩溃了恢复

func testa() {
   fmt.Println("aaaa")
}

func testb() {

   defer func() {
      //可以打印错误信息
      //recover()
      //fmt.Println(recover())

      //没有错就不要打印
      if err := recover(); err != nil {  //产生了panic异常
         fmt.Println(err)
      }
   }()
   //显示调用panic函数
   panic("this is a panic test")
   fmt.Println("bbbb")
}

func testc() {
   fmt.Println("cccc")
}

func main() {
   testa()
   //不会打印
   testb()
   testc()
}
控制链

 

func main() {
   fmt.Println("Enter function main.")
   panic(errors.New("something wrong"))
   p := recover()
   fmt.Printf("panic: %s\n", p)
   fmt.Println("Exit function main.")
}

这个不可以

需要defer结合使用
defer定义在恐慌前面是可以的

func main() {
   fmt.Println("Enter function main.")
   defer func() {
      //可以打印错误信息
      //recover()
      //fmt.Println(recover())

      //没有错就不要打印
      if err := recover(); err != nil {  //产生了panic异常
         fmt.Println(err)
      }
   }()
   panic(errors.New("something wrong"))
   fmt.Println("程序退出了")
}