概念 panic 与 recover 是 Go 的两个内置函数,这两个内置函数用于处理 Go 运行时的错误,panic 用于主动抛出错误,recover 用来捕获 panic 抛出的错误。 |
例子1 //以下捕获失败 defer recover() defer fmt.Prinntln(recover) defer func(){ func(){ recover() //无效,嵌套两层 }() }() //以下捕获有效 defer func(){ recover() }() func except(){ recover() } func test(){ defer except() panic("runtime error") } 例子2 多个panic只会捕捉最后一个: package main
import "fmt"
func main(){
defer func(){
if err := recover() ; err != nil {
fmt.Println(err)
}
}()
defer func(){
panic("three") //recover只会捕获到这个panic
}()
defer func(){
panic("two")
}()
panic("one")
}
|
使用场景 一般情况下有两种情况用到:
|