字节笔记本字节笔记本

Go 引起panic异常的操作

2023-03-09

在Go中,操作如空指针引用、数组越界、显式触发panic、调用未初始化函数变量和除以零等可引起panic异常,但可通过defer和recover进行异常处理。

在 Go 中,一些操作可以引起 panic 异常,以下是几个常见的例子:

  1. 空指针引用 panic:
var s *int
fmt.Println(*s)
  1. 数组越界 panic:
var a [5]int
fmt.Println(a[6])
  1. 显式触发 panic:
panic("oops")
  1. 调用一个未初始化的函数变量:
var f func(int) int
f(3)
  1. 除以 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 后捕获到该异常并进行处理。