Зачем нужен сетевой таймаут

«Зачем нужен сетевой таймаут» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сетевые таймауты в Go помогают избежать зависаний при работе с внешними ресурсами. Основные типы:

  1. Таймаут подключения (Dial timeout) - ограничивает время установки соединения.
  2. Таймаут чтения/записи - контролирует время ожидания данных.

Пример с http.Client:

client := &http.Client{
    Timeout: 5 * time.Second, // Общий таймаут
    Transport: &http.Transport{
        DialContext: (&net.Dialer{
            Timeout:   2 * time.Second, // Таймаут подключения
        }).DialContext,
        ResponseHeaderTimeout: 1 * time.Second, // Таймаут заголовков
    },
}

Без таймаутов приложение может "зависнуть" при проблемах сети. Рекомендуется всегда устанавливать разумные значения.