HTTP-запросы

Напиши на Go программу, которая будет выводить коды ответов на HTTP-запросы по двум URL-адресам (например, главная страница Google и главная страница Avito). Запросы должны осуществляться параллельно.

Вот пример программы на Go, которая выводит коды ответов на HTTP-запросы по двум URL-адресам, выполняя запросы параллельно:

package main

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

func main() {
    // Определяем URL-адреса для запросов
    urls := []string{
        "https://www.google.com",
        "https://www.avito.ru",
    }

    // Создаем канал для отправки результатов
    results := make(chan int, len(urls))

    // Создаем группу для ожидания завершения всех горутин
    var wg sync.WaitGroup

    // Запускаем горутины для выполнения запросов
    for _, url := range urls {
        wg.Add(1)
        go func(url string) {
            defer wg.Done()
            resp, err := http.Get(url)
            if err != nil {
                results <- 0
                return
            }
            results <- resp.StatusCode
        }(url)
    }

    // Ждем завершения всех горутин
    wg.Wait()
    close(results)

    // Выводим результаты
    for statusCode := range results {
        fmt.Println("Код ответа:", statusCode)
    }
}

Давайте разберем этот код:

Объяснение кода

  1. Мы определяем два URL-адреса, по которым будем делать запросы: https://www.google.com и https://www.avito.ru.

  2. Создаем канал results для отправки результатов запросов. Размер канала равен количеству URL-адресов, чтобы избежать блокировки горутин, ожидающих отправки результатов.

  3. Создаем группу sync.WaitGroup для ожидания завершения всех горутин.

  4. Запускаем горутины для выполнения HTTP-запросов по каждому URL-адресу. Внутри каждой горутины:

    • Отправляем HTTP-запрос с помощью http.Get(url).

    • Если возникает ошибка, отправляем код ответа 0 в канал results.

    • Если запрос успешен, отправляем код ответа в канал results.

    • Уменьшаем счетчик в группе sync.WaitGroup с помощью wg.Done().

  5. Ждем завершения всех горутин с помощью wg.Wait().

  6. Закрываем канал results.

  7. Выводим коды ответов, полученные из канала results.

Таким образом, программа выполняет HTTP-запросы по двум URL-адресам параллельно, используя горутины, и выводит коды ответов на эти запросы.

Last updated