Михаил: нет, это же основы работы с каналами в go. Если мы применяем range на канал, то мы читаем из канала записи, пока канал не будет закрыт. Т.е., эти 5 горутин, которые запускаются в первом цикле "for i := 0; i < NUM_WORKERS; i++", будут работать все время, вычитывая и обрабатывая записи. А так как этих горутин всего 5, одновременно будет обрабатываться всегда не более 5 записей.
Михаил: там еще есть нюанс, про который я не написал. После окончания работы filepath.Walk нужно закрыть канал close(sourceFileChan) и все горутины-обработчики корректно завершатся.
Михаил: у меня как раз это ограничение выставляется константой const NUM_WORKERS = 5
Так как запускаю я только 5 горутин-конвертеров, то они одновременно и забирают только 5 элементов на обработку, а остальные ожидают в очереди, вы запустите и посмотрите лог.
Riedel87: вам нужно копать в сторону внутренностей модуля net/http. При создании http сервера можно подменить http.Transport, например, на свою реализацию, которая будет считать нужные вещи, и прокидывать управление в настоящий транспорт.
у вас в том месте, где вызывается sendAll, переменная, в которой хранится соединение называется conn, а не myconn. Поэтому вызывать надо sendAll(msg, conn)
Riedel87: очевидно же, в нее нужно посылать еще и текущее соединение, посмотрите по ее параметрам. Если у вас возникают такие вопросы по вызову функций, то вам следует изучить сначала самые основы go, а потом уже браться за проекты.
Никита: на задаче двустороннего доступа к глобальному объекту использование мьютексов оправданно, имхо. Ибо на каналах это будет и медленнее и неприятно глазу.
Valrox: теперь осталось локализовать утечку. Подождите, пока число горутин вырастет заметно, например, до 200-500 и вызовите панику panic("") или пошлите kill -SIGQUIT. Программа закроется и напишет глобальный стектрейс всех горутин. Нужно поискать кучу повторяющихся горутин, зависших на одном месте. Или выложите трейс на pastebin.com и киньте ссылку, помогу.
Только вот у map имена всех ключей уникальны, не забывайте. Поэтому, чтобы иметь возможность использовать одинаковые имена файлов, лучше использовать массив структур.