golang goroutine 协程异常panic后怎么处理?返回什么样的结果?

本文通过一个测试代码示例,展示了在Go语言中如何使用goroutine和defer、recover处理panic异常。当doQuery函数触发panic时,协程的结果将变为默认零值,并且recover能捕获到错误信息。结论强调了在编写并发代码时,确保对panic进行适当处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 测试代码:

func main() {
    future := make(chan []int)
    go func() {
        future <- doQuery(100)
    }()

    fmt.Println("<-future ing ......")
    xxx := <-future
    fmt.Println("xxx = ",xxx)
    fmt.Println("<-future done ......")
}




func doQuery(aiwareId int) []int {
    defer func() {
        if err:= recover(); err != nil {
            logs.Error("结果异常 %s",err)
        }
    }()

    if 1==1 {
        panic("我错了")
    }
    return []int{aiwareId + aiwareId}
}


2 结果:

<-future ing ......
我错了
xxx =  []   
<-future done ......
Error 2021-06-16 09:49:28,159 v1(7) ErrTest.go:62 10.79.58.62 - - default - 0 获取交互结果异常 我错了
 

3 结论

 1 goroutine 必须处理panic 使用defer语句+recover

 2 panic后协程结果为默认零值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自驱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值