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

2023年1月22日09:29:48

 测试代码:

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后协程结果为默认零值

  • 作者:平静不绝望
  • 原文链接:https://beijingngcc.blog.csdn.net/article/details/117948420
    更新时间:2023年1月22日09:29:48 ,共 508 字。