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)
}
}
Давайте разберем этот код:
Объяснение кода
Мы определяем два URL-адреса, по которым будем делать запросы:
https://www.google.com
иhttps://www.avito.ru
.Создаем канал
results
для отправки результатов запросов. Размер канала равен количеству URL-адресов, чтобы избежать блокировки горутин, ожидающих отправки результатов.Создаем группу
sync.WaitGroup
для ожидания завершения всех горутин.Запускаем горутины для выполнения HTTP-запросов по каждому URL-адресу. Внутри каждой горутины:
Отправляем HTTP-запрос с помощью
http.Get(url)
.Если возникает ошибка, отправляем код ответа 0 в канал
results
.Если запрос успешен, отправляем код ответа в канал
results
.Уменьшаем счетчик в группе
sync.WaitGroup
с помощьюwg.Done()
.
Ждем завершения всех горутин с помощью
wg.Wait()
.Закрываем канал
results
.Выводим коды ответов, полученные из канала
results
.
Таким образом, программа выполняет HTTP-запросы по двум URL-адресам параллельно, используя горутины, и выводит коды ответов на эти запросы.
Last updated