Clientes HTTP, Client Timeout

Supongamos que realizamos una consulta a un servicio web como en los ejemplos anteriores. Sin embargo el tiempo de respuesta es largo debido a que el servidor tiene demasiado tráfico, o la velocidad de la red no es la mejor.

En estos casos requerimos especificar el tiempo máximo para que se completen las operaciones antes de considerarlas fallidas, a este valor le llamamos Timeout.

En el ejemplo anterior podemos completar la configuración del client de la siguiente forma.

client := &http.Client{
    Timeout: 5 * time.Millisecond,
}

Hemos cambiado el tiempo máximo de ejecución a solo 5 milisegundos, por lo que el tiempo de espera es muy bajo. Si ejecutamos el programa obtendremos.

$ go main.go
####/##/## ##:##:## Post https://httpbin.org/post: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
exit status 1

Ahora si cambiamos los valores por algo mas razonable como 5 segundos y volvemos a ejecutar, volvemos a obtener una respuesta satisfactoria.

client := &http.Client{
    Timeout: 5 * time.Second,
}