Транспорт @kostix - это, безусловно, то, что вы ищете в этом случае.Транспорт и клиенты безопасны для одновременного использования.Но, пожалуйста, прочитайте о Transport (и я также советую прочитать о клиенте), поскольку существует множество различных способов повлиять на то, как вы обрабатываете неактивные соединения, а не только упомянутый ранее DialContext.
Так как вы можете установить ResponseHeaderTimeout
:
ResponseHeaderTimeout, если он не равен нулю, указывает количество времени ожидания заголовков ответа сервера после полной записи запроса (включаяего тело, если есть).Это время не включает время чтения тела ответа.
Или, если вы используете безопасное соединение, вы можете установить TLSHandshakeTimeout
:
TLSHandshakeTimeout указывает максимальное количество времени ожидания ожидания рукопожатия TLS.Ноль означает отсутствие тайм-аута.
Для удобства чтения и обслуживания, я также предлагаю, возможно, создать функцию для построения вашего клиента, что-то вроде:
func buildClient(timeout time.Duration) *http.Client {
tr := &http.Transport{
IdleConnTimeout: timeout,
ResponseHeaderTimeout: timeout,
TLSHandshakeTimeout: timeout,
}
client := &http.Client{
Transport: tr,
Timeout: timeout,
}
return client
}