主要讲解Go语言中的 panic和recover
知识点:
- panic 在Go语言中 代表 无法进行处理的 严重问题发生,引起系统恐慌,抛出错误程序退出,在Go中能用error 就不用 panic,使用panic时代表 "这个问题处理不了,程序决定退出"。
- 当程序执行至panic时,中断本函数的执行,并且一直向上返回panic,并执行每一层的 defer ,返回到最后,程序退出。
- panic 向上返回的 过程中,如果碰到 recover ,则终止退出。
- recover 可以获取到 panic 中的值,并中断退出,recover只能在 defer 中使用
代码示例如下:
package main
import (
"fmt"
"errors"
)
// panic 、recover示例用法
func tryRecover() {
//
defer func() {
// 获取 panic 的值
r := recover()
if r == nil {
fmt.Println("没有发现 panic !")
return
}
// 判断 panic 是不是错误
if err, ok := r.(error); ok {
// 如果是错误,打印错误,并终止程序终止
fmt.Println("Error occurred:", err)
} else {
// 如果不是错误,那么类型未知,继续 panic
panic(fmt.Sprintf("I don't know what to do: %v", r))
}
}()
// 自定义普通错误 error
panic(errors.New("this is an error"))
// 构建代码逻辑运行错误
//b := 0
//a := 5 / b
//fmt.Println(a)
// 无法处理的 错误
//panic(123)
}
func main() {
tryRecover()
}