测试代码:
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后协程结果为默认零值