🟢 Лёгкий · 1 очк. Стандартная библиотека
Зачем создавать свой http.Client вместо использования http.DefaultClient?
A DefaultClient работает медленнее
B DefaultClient не имеет таймаутов - запрос может висеть бесконечно; свой клиент позволяет настроить Timeout и Transport
C DefaultClient не поддерживает HTTPS
D Нет причин, DefaultClient подходит для production
Объяснение вопроса

http.DefaultClient создается с нулевыми значениями - в частности, без Timeout. Это значит, что запрос к зависшему серверу будет ждать бесконечно, блокируя горутину и соединение.

// Опасно в production:
resp, err := http.Get(url) // использует DefaultClient без таймаута

// Правильно:
client := &http.Client{
    Timeout: 10 * time.Second,
    Transport: &http.Transport{
        MaxIdleConns:        100,
        MaxIdleConnsPerHost: 10,
        IdleConnTimeout:     90 * time.Second,
    },
}
resp, err := client.Get(url)

Что настраивается в своем клиенте:

  • Timeout - общий таймаут запроса (включая чтение тела)
  • Transport - пул соединений, TLS, прокси
  • CheckRedirect - политика перенаправлений
  • Jar - cookie jar
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.