Что такое errgroup?

Middle
1.1k просмотров
AFK Offer AI

golang.org/x/sync/errgroup — запуск группы горутин с отменой при первой ошибке.

import "golang.org/x/sync/errgroup"

g, ctx := errgroup.WithContext(context.Background())

urls := []string{"https://a.com", "https://b.com", "https://c.com"}

for _, url := range urls { g.Go(func() error { req, _ := http.NewRequestWithContext(ctx, "GET", url, nil) resp, err := http.DefaultClient.Do(req) if err != nil { return err // первая ошибка отменит ctx для остальных } defer resp.Body.Close() return nil }) }

if err := g.Wait(); err != nil { log.Fatal(err) // первая ошибка из группы }

С лимитом параллелизма (Go 1.20+):

g.SetLimit(5) // макс 5 параллельных горутин

g.Wait() блокирует до завершения всех горутин и возвращает первую ошибку. Отмена контекста — автоматическая, не нужно вручную cancel.

Следующий вопрос

Типы изоляции транзакций?