У вас IO-bound задача, а это значит:
- Вам нужно асинхронное решение, которое позволит избавится от времени ожидание IO операций в основном цикле программы.
- Необходимо знать максимальное время обработки ответа (назовём его response_processing_time).
- Необходимо знать минимальное время запроса (timeout) - время, в течении которого удалённый сервер не оборвёт связь (пусть будет request_time_out).
Последние два параметра связаны: response_processing_time > request_time_out * количество_запросов. То есть, если вы обрабатываете ответ сервера за 1мс или, другими словами обрабатываете 1000 запросов в секунду, это значит, что для тысячи запросов время соединения не должно быть меньше секунды. Для 5000 одновременных запросов - 5 секунд соответственно.
Это ограничение фундаментально и обойти его не получиться - можно только оптимизировать: или железом - задействовать дополнительные ядра процессора и/или программно - уменьшением времени обработки запроса.
Очевидно, что эти расчёты верны только для постоянного потока запросов, если у вас возможны паузы между запросами, то их надо вносить как поправочные коэффициенты.
Касательно сути вопроса - на чём лучше делать, я бы рекомендовал Go - идеальный язык для всяких сетевых штук, можно сказать, это его родная стихия. Тем более, что задача простая и её реализация не должна занять много времени даже для человека, который никогда с GoLang дела не имел.