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

 测试代码:

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