просмотре кода потребуется храбрость). На Playground работу продемонстрировать не удалось, так что на правах псевдокода: https://play.golang.org/p/0FMCYvjId59
Пункт В - ожидаем, пока данные передадутся в канал для обработки, все просто
Пункт С - ожидаем, пока горутины обработают все данные в каналах (len будет нулевой)
Пункт А - вот в нем как раз проблема. Во время работы горутины наступает ситуация, когда данные взяты из канала inputs (и его длина становится 0), но еще не обработаны, а горутина showData взяла данные из канала results и тоже обнулила его длину.
То есть, горутина всё еще работает, а процесс считает себя завершенным и уходит.
Решить это таймаутами - смахивает на костыль и не дает гарантий. Еще один канал или WaitGroup для синхронизации - не уверен. Подскажите, пожалуйста, как будет правильее?
вы не хотите закрывать канал когда асе даннве туда звписали?
раз у вас уже используется WaitGroup почему не использовать ее на каждую горутину (и filler и worker и showData)?
Обсуждают сегодня