Реализуйте на Go функцию, которая последовательно/параллельно с ограничением числа воркеров выполняет HTTP-запросы по списку URL и печатает «<адрес> ok» при HTTP 200, иначе «<адрес> not ok».

Используйте пул из N goroutine и канал адресов. Каждая goroutine выполняет запрос с timeout, закрывает response body и печатает статус; N=1 даёт последовательное выполнение.

Короткий ответ

Что ответить на собеседовании

Используйте пул из N goroutine и канал адресов. Каждая goroutine выполняет запрос с timeout, закрывает response body и печатает статус; N=1 даёт последовательное выполнение.

Подробный разбор

Ответ с пояснениями

Используйте пул из N goroutine и канал адресов. Каждая goroutine выполняет запрос с timeout, закрывает response body и печатает статус; N=1 даёт последовательное выполнение.

package main

import (
    "fmt"
    "net/http"
    "sync"
    "time"
)

func checkURLs(urls []string, workers int) error {
    if workers < 1 { return fmt.Errorf("workers must be positive") }
    if workers > len(urls) { workers = len(urls) }
    client := &http.Client{Timeout: 10 * time.Second}
    defer client.CloseIdleConnections()
    jobs := make(chan string)
    var wg sync.WaitGroup
    for i := 0; i < workers; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            for url := range jobs {
                status := "not ok"
                response, err := client.Get(url)
                if err == nil {
                    if response.StatusCode == http.StatusOK { status = "ok" }
                    response.Body.Close()
                }
                fmt.Printf("%s %s\n", url, status)
            }
        }()
    }
    for _, url := range urls { jobs <- url }
    close(jobs)
    wg.Wait()
    return nil
}

func main() {}

Вывод идёт по завершению запросов, не по входному порядку. Client по умолчанию следует redirect; оценивается конечный статус. Тело не читается, поэтому переиспользование соединения может быть ограничено.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее