Без таймаутов HTTP-клиент или сервер может зависнуть навсегда — если сервер не отвечает, соединение утекает, горутина блокируется, ресурсы не освобождаются.
client := &http.Client{
Timeout: 10 * time.Second,
}
// или через context
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)
На сервере тоже нужны таймауты: ReadTimeout, WriteTimeout, IdleTimeout. Без них медленные клиенты (slowloris) могут исчерпать все соединения. Правило: всегда ставь таймауты на обе стороны.