¿Qué es el contexto en Go? ¿En qué se diferencia context.WithTimeout de context.WithDeadline?
sobes.tech AI
Respuesta de la IA
En Go, el paquete context se utiliza para transmitir señales de cancelación, límites de tiempo y otros valores entre goroutines, lo que ayuda a gestionar la duración de las operaciones y su cancelación.
-
context.WithTimeout(parent, timeout)crea un nuevo contexto que se cancela automáticamente después del período de tiempotimeoutdesde el momento actual. -
context.WithDeadline(parent, deadline)crea un nuevo contexto que se cancela en un momento específicodeadline.
La principal diferencia: WithTimeout establece un tiempo de espera relativo al momento actual, mientras que WithDeadline establece un tiempo absoluto. Internamente, WithTimeout se implementa mediante WithDeadline, calculando el deadline como time.Now() + timeout.
Ejemplo:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
select {
case <-time.After(10 * time.Second):
fmt.Println("operación completada")
case <-ctx.Done():
fmt.Println("tiempo de espera alcanzado")
}