WaitGroup не собирает ошибки. Реализуйте runParallel(fs []func() error) []error: каждая горутина пишет ошибку в свою ячейку слайса, порядок сохраняется, nil-ошибки отбрасываются.
- Задача
- Решение
- Обсуждение
RunParallel: сбор ошибок вручную
GolangРешение
func runParallel(fs []func() error) []error {
errs := make([]error, len(fs))
var wg sync.WaitGroup
for i, f := range fs {
wg.Add(1)
go func(i int, f func() error) {
defer wg.Done()
errs[i] = f()
}(i, f)
}
wg.Wait()
var out []error
for _, e := range errs {
if e != nil {
out = append(out, e)
}
}
return out
}