Sobes.tech
Назад к вопросам
Junior — Middle
77

Вы когда-нибудь применяли структуру ErrGroup в своих проектах для управления параллельными задачами?

Ответ от нейросети

sobes.tech AI

Да, структура errgroup.Group из пакета golang.org/x/sync/errgroup часто использовалась для управления параллельными задачами.

Она позволяет запускать несколько горутин, собирать ошибки и ждать завершения всех задач. Это удобно, когда нужно выполнить несколько независимых операций параллельно и обработать ошибки централизованно.

Пример использования:

import (
    "context"
    "golang.org/x/sync/errgroup"
)

func fetchData(ctx context.Context) error {
    g, ctx := errgroup.WithContext(ctx)

    urls := []string{"url1", "url2", "url3"}

    for _, url := range urls {
        url := url // локальная копия для замыкания
        g.Go(func() error {
            // здесь код для загрузки данных с url
            return nil // или ошибка
        })
    }

    if err := g.Wait(); err != nil {
        return err
    }
    return nil
}

Таким образом, errgroup упрощает параллельное выполнение с контролем ошибок и отменой через контекст.