我尝试在恢复时在通道中发送错误 为什么这个错误没有发送到通道?package mainimport ( "fmt" "sync" "errors")func main() { var wg sync.WaitGroup wg.Add(1) batchErrChan := make(chan error) go func(errchan chan error) { defer func() { if r := recover(); r != nil { errchan <- errors.New("recover err") } close(batchErrChan) wg.Done() }() panic("ddd") }(batchErrChan) go func() { for _ = range batchErrChan { fmt.Println("err in range") } }() wg.Wait()}https://play.golang.org/p/0ytunuYDWZU我希望打印“范围内的错误”,但事实并非如此。为什么?
1 回答

摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
你的程序在 goroutine 有机会打印消息之前结束。尝试等待它:
...
done:=make(chan struct{})
go func() {
for _ = range batchErrChan {
fmt.Println("err in range")
}
close(done)
}()
wg.Wait()
<-done
}
- 1 回答
- 0 关注
- 101 浏览
添加回答
举报
0/150
提交
取消