errgroup 包
errgroup 是 go 官方提供的一个额外的库golang.org/x/sync/errgroup
,它可以将一个大的任务拆解成多个任务来并发的执行,并且很容易的管控着并发协程的生命周期
底层通过 waitgroup 来控制让所有其他协程运行完主协程 wait 才会被放行
底层通过 context 的只读 channel 来管控子协程的生命周期,如果有一个子协程有 error 返回,那么 context 就会被 cancel
结构体 group
type Group struct {
cancel func()
wg sync.WaitGroup
errOnce sync.Once
err