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