Нужно параллельно выполнить несколько задач, остановиться при ошибке и ограничить количество одновременно работающих операций?
Вместо WaitGroup + канала ошибок можно использовать golang.org/x/sync/errgroup:
g, ctx := errgroup.WithContext(ctx)
g.SetLimit(8)
for _, url := range urls {
g.Go(func() error {
return fetch(ctx, url)
})
}
if err := g.Wait(); err != nil {
return err
}
WithContext отменяет контекст при первой ошибке, SetLimit(8) держит максимум 8 активных горутин, а Wait() возвращает ошибку.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction



