golang.org/x/sync/errgroup chạy nhiều goroutine, trả về lỗi đầu tiên và cancel tất cả khi một cái lỗi.
go
g, ctx := errgroup.WithContext(ctx)
g.Go(func() error { /* ... */ })
if err := g.Wait(); err != nil {
// ...
}Tốt hơn WaitGroup khi cần lan truyền lỗi và cancellation.