Middle
¿Qué es el contexto en Go? ¿Para qué se utiliza? ¿Cómo funciona la cancelación por tiempo de espera?
sobes.tech AI
Respuesta de la IA
En Go, context es un paquete y un concepto para gestionar la duración de las operaciones, transmitir señales de cancelación y establecer límites de tiempo entre goroutines.
Las tareas principales del contexto:
- Cancelar operaciones (por ejemplo, en caso de tiempo de espera o cancelación por parte del usuario),
- Transmitir valores (por ejemplo, ID de solicitud) a través de la cadena de llamadas,
- Establecer límites de tiempo (timeouts).
La cancelación por tiempo de espera funciona así:
- Se crea un contexto con un límite de tiempo o timeout, por ejemplo,
context.WithTimeout. - Cuando se cumple el tiempo, se llama automáticamente a la cancelación del contexto.
- La goroutine que escucha este contexto recibe una señal de cancelación a través del canal
Done(). - La goroutine debe manejar correctamente la cancelación (por ejemplo, interrumpiendo el trabajo y liberando recursos).
Ejemplo:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operación completada")
case <-ctx.Done():
fmt.Println("operación cancelada o agotada")
}
Aquí, la operación se interrumpirá después de 2 segundos si no termina antes.