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不起作用
通过这种方式,可以实现错误处理的功能。