Назад к задачам
Junior — Senior
3

Ограниченный пул горутин для выполнения GET‑запросов

Компании, где спрашивали:

Фабрика РешенийФабрика Решений
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо обеспечить запуск не более трёх одновременно работающих воркеров, которые делают HTTP‑GET запросы к URL‑адресам из предоставленного списка и выводят тело ответа в стандартный вывод.

package main

import (
    "log"
)

// worker pool:
//   организовать запуск не более 3 параллельных воркеров,
//   которые выполняют запросы на все url из массива urls
//   и выполнят GET‑запрос на каждый URL.
//   Вывести body ответа в stdout в текстовом виде.

// пример урлов, которые получаем от генератора:
//
// http://echo.xff.pw:8080/?echo_time=100&echo_body=body-1
// http://echo.xff.pw:8080/?echo_time=1500&echo_body=body-2
// http://echo.xff.pw:8080/?echo_time=500&echo_body=body-3
// http://echo.xff.pw:8080/?echo_time=150&echo_body=body-4
// http://echo.xff.pw:8080/?echo_time=500&echo_body=body-5

// функцию main желательно никак не менять,
// но если требуется по реализации — можно

func main() {
    pool := makePool(3)
    for url := range generateUrls(5) {
        log.Printf("=> Запуск, %s", url)
        pool.DoWork(url)
    }
}