🥇 Time, Manejo de timeouts.

Imaginemonos 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 caida en el api que estamos consultando, lo que dejaría colgado el proceso debido a que no recibiriamos respuesta, o al menos no estaríamos definiendo el tiempo límite para dicha consulta.

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")
    }
}

En el ejemplo tenemos…

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”.

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