Go语言-panic、recover和error

在Go语言中,一般的错误处理,通过error就够了,但是对于严重的错误,需要终止进程的操作,需要用到panic,与panic相关的还有recover,recover用来截获panic的错误信息。归纳如下:

error:处理一般性的错误

panic:处理需要终止程序的错误,并且会将堆栈里面的数据信息dump出来

recover:截获panic的异常错误信息,并能执行处理,使程序跳过panic继续执行而不会直接崩溃

 

复制代码
func main()  {
    testPanic(-10)
    fmt.Println("finish success")
}

// 测试panic
func testPanic(param int) {

    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("截获到panic异常",err)
        }
    }()

    if param < 0 {
        panic("参数不能小于0")
    }
    fmt.Println("input param:",param)
}
复制代码

执行结果:

截获到panic异常 参数不能小于0
finish success

可以看到通过panic抛出的错误被recover截获到了,并进行了处理。

 

需要注意的是:

1、recover必须结合panic和defer使用

2、recover必须和panic处于同一个协程里面

复制代码
func main()  {

    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("截获到panic异常",err)
        }
    }()
    go testPanic(-10)
    fmt.Println("finish success")
}

// 测试panic
func testPanic(param int) {

    if param < 0 {
        panic("参数不能小于0")
    }
    fmt.Println("input param:",param)
}
复制代码

执行结果:

finish success

可以看到recover在主协程中,而当panic发生在子协程中的时候,recover并不能截获到panic的异常信息。

 

posted on   funnyboy0128  阅读(216)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示