代码点读机 / Go / recover

recover Go · 内置功能

捕获当前 goroutine 的 panic 并恢复执行,让程序不崩溃;必须放在 defer 里才有效。

怎么用

在 defer 函数中写 if r := recover(); r != nil { ... }

小例子

package main
import "fmt"

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("恢复了", r)
        }
    }()
    panic("出事")
}

运行结果

输出 恢复了 出事

提醒:recover 只在当前 goroutine 的 defer 中有效,不能捕获其它 goroutine 的 panic

官方文档:https://go.dev/ref/spec#Built-in_functions

在代码里遇到不认识的词?打开代码点读机,点一下就懂 → ← Go全部词条