Загрузка…
Загрузка…
Go · junior · сложность 4
Подпрограмма не может «вернуть» значение напрямую через return вызывающей стороне. Поэтому ошибка от параллельной задачи передается явно: через канал ошибки или через errgroup, который инкапсулирует этот шаблон.
errgroup.Group + context (рекомендуется): лучше всего подходит для управления группой
горутины, собирающие первую ошибку и отменяющие оставшиеся задачи.
Отдельный errCh + WaitGroup: явный контроль над жизненным циклом;
после завершения всех рабочих канал закрывается, а основной
поток читает ошибки.
Ошибки передаются в один согласованный канал/агрегатор.
Закрытие errCh осуществляется координатором после завершения всех
writer-routines.
При первой критической ошибке другие задачи следует остановить через context.
(чтобы избежать бесполезной работы и утечек горутины).
Ошибки в конкурирующих ветках игнорировать нельзя — это создает «тихую» defects.
Запустите воркеры с доступом к ctx.
В случае ошибки отправить error агрегатору.
Отменить контекст (если требуется политика отказоустойчивости).
Подождите, пока завершится выполнение всех горутин.
Вернуть согласованный результат (первая ошибка или совокупная ошибка).
Правильный «возврат» ошибки из горутины — это дисциплина явного канала связи плюс управление жизненным циклом через WaitGroup/errgroup и context. На производстве чаще всего оптимальным выбором является errgroup.
Подпрограмма не может «вернуть» значение напрямую через return вызывающей стороне.