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} }
<-future ing ......
我错了
xxx = []
<-future done ......
Error 2021-06-16 09:49:28,159 v1(7) ErrTest.go:62 10.79.58.62 - - default - 0 获取交互结果异常 我错了
1 goroutine 必须处理panic 使用defer语句+recover
2 panic后协程结果为默认零值