GO基础-异常处理
大约 1 分钟
异常处理
Go 语言没有传统的异常处理机制,如 Java、C++ 或 Python 中的 try-catch 语句。取而代之,Go 采用了基于返回错误值和 panic/recover 机制的混合模式来进行错误处理。
Go中两种处理异常的方式:
- 程序异常时,将异常信息反馈给使用者
- 程序异常时,终止运行立刻退出
中断程序
遇到错误直接停止程序
这种一般是用于初始化,一旦初始化出现错误,程序继续走下去也意义不大了,还不如中断掉
package main
import (
"fmt"
"os"
)
func init() {
// 读取配置文件中,结果路径错了
_, err := os.ReadFile("xxx")
if err != nil {
panic(err.Error())
}
}
func main() {
fmt.Println("啦啦啦")
}
恢复程序
我们可以在一个函数里面,使用一个defer,可以实现对panic的捕获,以至于出现错误不至于让程序直接崩溃
这种一般是框架层的异常处理做的事
package main
import (
"fmt"
"runtime/debug"
)
func read() {
defer func() {
if err := recover(); err != nil {
fmt.Println(err) // 捕获异常,打印错误信息
// 打印错误的堆栈信息
s := string(debug.Stack())
fmt.Println(s)
}
}()
var list = []int{2, 3}
fmt.Println(list[2]) // 肯定会有一个panic
}
func main() {
read()
}