一、panic
1.停止当前函数执行
2.一直向上返回,执行每一层的defer
3.如果没有遇见recover,程序退出
二、recover
1.仅在defer调用中使用
2.获取panic
3.如果无法处理,可重新panic
示例:
func tryRecover() {
defer func() {
r := recover()
if err, ok := r.(error); ok {
fmt.Println("Error occurred:", err)
} else {
panic(r)
}
}()
//b := 0
//a := 5 / b
//fmt.Println(a)
panic("123")
// panic(errors.New("this is an error"))
}
func main() {
tryRecover()
}
三、error vs panic
1.意料之中的:使用error。如:文件打不开
2.意料之外的:使用panic。如:数组越界