Вам нужно использовать ErrGroup
Это то, что ErrGroup. Go Делает
Первый вызов, чтобы вернуть ненулевую ошибку отменяет группа; его ошибка будет возвращена функцией Wait.
Таким образом, другие процедуры будут автоматически отменены, если возникнет какая-либо ошибка возврата.
Использование:
errs, ctx = errgroup.WithContext(ctx)
for i := 0; i < size; i++ {
errs.Go( func() error{
...
})
}
if err := g.Wait(); err != nil {
// Handle Errors from GoRoutines
}