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,
}