Golang 的 panic 和 recover 是如何工作的?

Golang中的panic和recover主要用于错误处理。
它们的工作原理如下:
一、panic
panic用于在运行时抛出一个错误。
语法格式:

panic(error)// error 可以是任何类型

使用 panic 之后:

  • 当前函数停止执行
  • 开始执行当前函数的defer声明的函数
  • 如果当前函数也抛出panic,会向上一层函数传递

二、recover
recover用于捕获panic。
语法格式:

recover()

只能在 defer 调用中使用。外层函数无法捕获内层抛出的panic。

三、使用

func fun1() {
   panic(" error occur!")   
}

func fun2() {
   defer func() {
       if err := recover(); err != nil {
           fmt.Println(err) 
       }    
   }()
   fun1()
}

这里 fun2 使用defer捕获了fun1的panic。
打印出”error occur!”。

四、注意事项:

  • recover() 必须在 defer 中才有效果。
  • 只能捕获当前扩展栈顶的函数中的 panic。
  • 捕获一次 panic 后,后续的panic将不起作用。

总的来说:

  • panic用于在运行时触发错误
  • recover用于捕获panic
  • 只能在defer中使用recover
  • 只能捕获当前函数的panic
  • 捕获一次后,后续panic不起作用

通过这种方式,可以实现错误处理的功能。