panic (抛出异常)
停止当前函数执行
一直向上返回,执行每一层的defer
如果没有遇见recover, 程序退出
recover (捕获异常)
仅在defer调用中使用
获取panic的值
如果无法处理,可重新panic
package main
import (
"errors"
"fmt"
)
func tryRecover(){
// 通过 defer 获取 panic 的错误
defer func() {
r := recover()
// 如果接收到的是一个 error 类型
if err, ok := r.(error); ok {
// 捕获异常
fmt.Println("捕获了这个错误!", err)
} else {
// 重新抛出一个异常
panic(r)
}
}()
panic(errors.New("出现错误了!"))
// 这个 painc 是捕获不了的, 因为这个里面放的不是错误
// 那么就只能由上面的重新抛出一个异常
// panic(123)
}
func main() {
tryRecover()
}
有疑问加站长微信联系(非本文作者)