- 在`defer`中调用了内置函数`recover`,`recover`会使程序从 `panic`中恢复,并返回`panic value`
- 导致`panic`异常的函数不会继续运行,但能正常返回
- 在未发生`panic`时调用`recover`,`recover`会返回`nil`
示例1
func main() {
defer func() {
if err := recover(); err != nil {
log.Println("defer--->", err)
}
}()
panic("提前终止程序!")
log.Println("结束了!") // 代码不执行
}
示例2
func fn1() {
defer func() {
if err := recover(); err != nil {
log.Println("defer--->", err)
}
}()
panic("fn1函数报错了")
}
func fn2() {
log.Println("这里是fn2函数")
}
func main() {
for i := 0; i < 3; i++ {
fn1() // 当fn1函数报错时,recover恢复报错,程序继续向下执行
fn2()
}
}