Go语言panic机制详解
一、panic介绍
panic 是 Go 语言内置的错误处理机制,用于表示程序发生了不可恢复的错误。当 panic 被触发时,会立即停止当前函数的执行,随后对函数调用栈进行展开,逐个执行栈中函数的 defer 语句。
panic 的主要特点:
1)会导致程序立即停止当前流程。
2)会沿调用栈向上回退。
3)可以被 recover 捕获。
4)会执行已注册的 defer 函数。
二、panic触发方式
panic 主要有两种触发来源:
1)运行时自动触发:如数组越界、空指针引用、除零错误等。
2)开发者显式调用:通过 panic()
函数主动触发,代码示例如下:
func main() {panic("panic error")
}
运行结果如下:
三、panic处理机制
1)panic过程
当 panic 发生时,Go 会执行以下流程:
(1)立即终止当前函数的执行。
(2)按后进先出顺序执行当前函数中注册的所有 defer 函数。
(3)沿调用栈向上回溯,重复执行上述步骤。
(4)若未被 recover 捕获,程序最终会崩溃退出。
2)recover 恢复
Go 语言内置的 recover 函数用于捕获 panic 并恢复程序正常执行。需要注意的是,recover 必须配合 defer 语句使用才有效。代码示例如下: