Golang 第五章 10.recover

  • By v2ray节点

  • 2026-03-26 16:57:52

  • 评论

recover 是 Go 中 从 panic 中恢复 的内置函数。

只能在 defer 函数中调用

返回值为 panic 传递的值

如果没有 panic,返回 nil



基本示例

func f() {
    defer func() {
        r := recover()  // 捕获 panic
        if r != nil {
            fmt.Println("捕获到 panic:", r)
        }
    }()

    panic("发生错误")
}

func main() {
    f()
    fmt.Println("程序继续执行")
}

输出:

捕获到 panic: 发生错误
程序继续执行

panic 被 recover 捕获

程序不会崩溃

defer 保证资源清理



注意事项

recover 仅在 defer 中有效

必须先 defer 才能 recover

recover 返回 panic 的值

如果没有 panic,recover 返回 nil



实战示例:安全调用函数

func safeCall(f func()) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("函数执行时发生 panic:", r)
        }
    }()
    f() // 调用可能 panic 的函数
}

func main() {
    safeCall(func() {
        panic("意外错误")
    })
    fmt.Println("程序继续运行")
}

输出:

函数执行时发生 panic: 意外错误
程序继续运行

使用 recover 包裹函数调用

可捕获错误并继续程序执行

常用于服务器或后台任务,提高稳定性



recover 使用场景

保护服务器请求处理函数

防止 goroutine 崩溃

处理不可预测的 runtime 错误

v2ray节点购买