Запустите по горутине на URL, задайте HTTP-таймаут, закройте тела ответов и дождитесь обеих операций. Ошибки обрабатываются отдельно от кодов HTTP.
// Написать код, который будет выводить коды ответов на HTTP-запросы по двум URL адресам (например главная страница Google и главная страница dzen.ru)
Запустите по горутине на URL, задайте HTTP-таймаут, закройте тела ответов и дождитесь обеих операций. Ошибки обрабатываются отдельно от кодов HTTP.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
// Написать код, который будет выводить коды ответов на HTTP-запросы по двум URL адресам (например главная страница Google и главная страница dzen.ru) // Запросы должны осуществляться параллельно.
Ответ
Запустите по горутине на URL, задайте HTTP-таймаут, закройте тела ответов и дождитесь обеих операций. Ошибки обрабатываются отдельно от кодов HTTP.
Пример на Go печатает код конечного ответа после стандартных перенаправлений. Порядок двух строк не определён.
package main
import (
"fmt"
"net/http"
"sync"
"time"
)
func main() {
client := &http.Client{Timeout: 5 * time.Second}
var wg sync.WaitGroup
for _, address := range []string{"https://www.google.com", "https://dzen.ru"} {
wg.Add(1)
go func(url string) {
defer wg.Done()
resp, err := client.Get(url)
if err != nil {
fmt.Printf("%s: %v\n", url, err)
return
}
defer resp.Body.Close()
fmt.Printf("%s: %d\n", url, resp.StatusCode)
}(address)
}
wg.Wait()
}
Наличие HTTP 4xx/5xx само по себе не означает ошибку client.Get: проверяйте StatusCode. Для большого списка вместо горутины на каждый адрес нужен ограниченный пул.