登录
首页 >  Golang >  Go教程

Golangrecover防崩溃使用详解

时间:2025-10-12 13:36:31 489浏览 收藏

你在学习Golang相关的知识吗?本文《Golang recover防崩溃使用教程》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

recover可捕获panic并恢复执行,需与defer配合使用。示例中safeDivide通过defer+recover处理除零panic,输出“捕获到异常: 除数不能为零”;HTTP服务中利用此机制防止单个请求崩溃影响全局,panicHandler在defer中recover并返回500错误;还可封装handlePanic函数统一处理,适用于中间件等场景,但不应替代常规error处理。

Golang使用recover避免程序崩溃示例

在Golang中,当程序发生panic时,默认会终止运行。通过结合defer和recover,可以捕获panic,避免程序整体崩溃。recover只能在defer函数中使用,用于恢复正常执行流程。

基本recover用法

recover必须配合defer使用。下面是一个基础示例:

func safeDivide(a, b int) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获到异常:", r)
        }
    }()
    if b == 0 {
        panic("除数不能为零")
    }
    fmt.Println("结果:", a/b)
}

调用safeDivide(10, 0)不会导致程序退出,而是输出“捕获到异常: 除数不能为零”。

在HTTP服务中防止崩溃

Web服务中常用recover避免单个请求错误影响整个服务:

func panicHandler(w http.ResponseWriter, r *http.Request) {
    defer func() {
        if r := recover(); r != nil {
            http.Error(w, "服务器内部错误", http.StatusInternalServerError)
            log.Printf("请求出错: %v", r)
        }
    }()
    // 模拟可能出错的逻辑
    panic("模拟服务错误")
}

这样即使某个请求触发panic,其他请求仍可正常处理。

自定义错误处理函数

可将recover逻辑封装成通用函数:

func handlePanic() {
    if r := recover(); r != nil {
        fmt.Printf("发生严重错误: %v\n", r)
        // 可在此做日志、告警等操作
    }
}

func riskyOperation() {
    defer handlePanic()
    panic("出错了")
}

这种方式便于统一管理错误恢复逻辑。

基本上就这些。recover不是用来处理普通错误的,只应在真正需要防止崩溃的场景使用,比如中间件、任务协程或对外接口。常规错误应使用error返回值处理。

以上就是《Golangrecover防崩溃使用详解》的详细内容,更多关于的资料请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>