Ну тогда надо искать причину. Потому что причина то совсем в другои. а не в количестве потоков. Хотя там у вас может их намного больше, просто вы об этом не знаете.
а если добавить <- wait в код и при получении результата too many connections создавать одну горутину и делать в ней time.Sleep и после слипа отправлять в канал true например что позволит продолжить выполнение? разве каналы не блокируют выполнение?
1. нет никакого пула 2. есть цикл, который запускает горутины, которые обрабатывают каждая один запрос 3. результат обработчики возвращают через канал 4. как только приедет ошибка от обработчика - цикл останавливает запуск новых на N секунд