Не могу сообразить: есть три гоурутины, две из них идут в базу и делают запросы, а одна парсит шаблон.
Мне необходимо сделать так, чтобы если хотя бы одна из этих гоурутин вернула ошибку, то сразу отправить ответ клиенту об ошибке, не дожидаясь конца работы остальных гоурутин.
Если же никаких ошибок в канал не поступало, тогда ждем пока все гоурутины отработают, и тогда шаблон воспользуется результатом двух других гоурутин.
Натолкните на мысль как это сделать.
upd.:
Пришел в голову такой вариант:
- создаем буферизированный канал с ошибками (длина канала = кол-ву гоурутин, чтобы не было утечки гоурутин)
- создаем
sync.WaitGroup
- делаем select, где либо читаем из канала ошибку, обрабатываем её и возвращаемся, либо ждем пока WaitGroup.Done(), и работаем как обычно
Как-то так:
https://play.golang.org/p/SBfuM-VChhU
Есть ли тут подводные камни, можно ли как-то улучшить конструкцию?