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

  • Una función que toma 5 segundos para leer la respuesta de una API (esto es una simulación).
func leerApi() string {
    time.Sleep(5 * time.Second)
    return "respuesta del api"
}
  • Un canal para solicitar/recibir los datos.
c1 := make(chan string, 1)
  • Para hacer la llamada asíncrona, debemos invocar la función leerApi() y asignamos el valor al canal.
go func() {
    c1 <- leerApi()
}()
  • Ahora utilizamos un selecta que cubre 2 escenarios. El primero asignamos el valor asignado a c1 y en el segundo se dispara cuando el tiempo se agota, es decir 3 segundos después.
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.

VPN

  • Ir a la oferta de NordVPN

Moda

Accesorios