Golang错误处理机制
panic异常
panic异常
- Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,比如除零错误、数组访问越界、空指针引用等,这些运行时错误会引起panic异常。
- 当panic异常发生时,程序会中断运行,并立即执行当前函数中的defer语句,然后程序会从调用栈中逐级返回,返回同时执行各级函数中的defer语句,直到panic被捕获或程序终止。
例如,下面的代码在运行过程中,由于存在除零错误将导致panic异常。如下:
package main
import "fmt"
func Division(num1 int, num2 int) int {
defer fmt.Println("Division defer...")
return num1 / num2
}
func main() {
defer fmt.Println("main defer...")
// panic异常
result := Division(10, 0)
fmt.Printf("result = %d\n", result)
fmt.Println("other code...")
}
运行代码后可以看到,main函数中调用Division函数之后的代码没有被执行。但在程序退出之前,Division和main函数中的defer语句被逐一执行。如下:
recover捕获异常
recover捕获异常
- 当触发panic异常时&#