• Задача
  • Решение
  • Обсуждение

RunParallel: сбор ошибок вручную

WaitGroup не собирает ошибки. Реализуйте runParallel(fs []func() error) []error: каждая горутина пишет ошибку в свою ячейку слайса, порядок сохраняется, nil-ошибки отбрасываются.

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
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

00:00:00
Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки