Sobes.tech
Senior

¿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 tiempo timeout desde el momento actual.

  • context.WithDeadline(parent, deadline) crea un nuevo contexto que se cancela en un momento específico deadline.

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