Time, Manejo de timeouts Time, Manejo de timeouts

🥇 Time, Manejo de timeouts

🍿 ¿Qué significa el término timeout?

Un timeout es el tiempo máximo de ejecución que un programa puede esperar antes de abortar su ejecución.

🍿 ¿Cómo definir timeouts en Go?

Imaginémonos que tenemos una función que consulta los datos desde un servidor, por ejemplo haciendo uso de http.Get, sin embargo puede darse el caso que exista una caída en el api que estamos consultando, lo que dejaría colgado el proceso debido a que no recibiríamos respuesta, o al menos no estaríamos definiendo el tiempo límite para dicha consulta.

🍿 Ejemplo del uso de timeouts en Go

package main

import (
    "fmt"
    "time"
)

func leerApi() string {
    time.Sleep(5 * time.Second)
    return "respuesta del api"
}

func main() {

    c1 := make(chan string, 1)

    go func() {
        c1 <- leerApi()
    }()

    select {
    case res := <-c1:
        fmt.Println(res)
    case <-time.After(3 * time.Second):
        fmt.Println("timeout")
    }
}

🍿 Descripción del ejemplo del uso de timeouts en Go

func leerApi() string {
    time.Sleep(5 * time.Second)
    return "respuesta del api"
}
c1 := make(chan string, 1)
go func() {
    c1 <- leerApi()
}()
select {
case res := <-c1:
    fmt.Println(res)
case <-time.After(3 * time.Second):
    fmt.Println("timeout")
}

Si ejecutamos el programa la primer condición en cumplirse es el timeout, debido a que 3 segundos ocurren antes que 5 segundos. Por lo que el programa imprimirá “timeout”.

Si reducimos el tiempo de la función del api a 2 segundos y volvemos a ejecutar, obtendremos ahora como salida “respuesta del api”.

Definir un timeout en un programa nos permite prevenir escenarios en donde la respuesta esperada se pierde en la red o tarda demasiado en llegar.

Time, Realizar pausa Time, Programar un temporizador
comments powered by Disqus