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

16次阅读
没有评论

 测试代码:

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

正文完
 0