Go 引起panic异常的操作
2023-03-09
在Go中,操作如空指针引用、数组越界、显式触发panic、调用未初始化函数变量和除以零等可引起panic异常,但可通过defer和recover进行异常处理。
在 Go 中,一些操作可以引起 panic 异常,以下是几个常见的例子:
- 空指针引用 panic:
var s *int
fmt.Println(*s)
- 数组越界 panic:
var a [5]int
fmt.Println(a[6])
- 显式触发 panic:
panic("oops")
- 调用一个未初始化的函数变量:
var f func(int) int
f(3)
- 除以 0:
var a int
var b int = 0
fmt.Println(a / b)
在这些操作引起 panic 后,程序会中止并输出相应的报错信息。为了捕获 panic,可以使用 defer 和 recover 函数来实现异常处理。例如:
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("发生了 panic:", r)
}
}()
var s *int
fmt.Println(*s)
// 发生了panic,但由于使用了recover,程序不会中止
}
通过 defer 延迟执行一个包含 recover 函数的匿名函数,即可在发生 panic 后捕获到该异常并进行处理。