Paquete Context
Plazos, cancelación y valores a nivel de solicitud. Los resultados aparecen en la misma valla: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Busca en todas las páginas de la documentación
Plazos, cancelación y valores a nivel de solicitud. Los resultados aparecen en la misma valla: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Señal de cancelación manual.
ctx, cancel := context.WithCancel(context.Background())
cancel()
ctx.Err() // context.CanceledCancelación automática después de una duración.
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
defer cancel()
<-ctx.Done()
errors.Is(ctx.Err(), context.DeadlineExceeded) // trueAlmacena datos a nivel de solicitud - usa claves tipadas.
type key int
const userKey key = 0
ctx := context.WithValue(context.Background(), userKey, "ada")
ctx.Value(userKey) // "ada"Comprueba por qué terminó el contexto.
ctx, cancel := context.WithCancel(context.Background())
cancel()
errors.Is(ctx.Err(), context.Canceled) // trueBackground es la raíz; TODO es un marcador de posición.
context.Background() != nil // trueCancela en un tiempo absoluto.
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Hour))
defer cancel()
ctx.Err() == nil // true hasta la fecha límiteEspera la cancelación o el trabajo.
ctx, cancel := context.WithCancel(context.Background())
cancel()
select {
case <-ctx.Done():
errors.Is(ctx.Err(), context.Canceled) // true
}Por convención, Context es el primer parámetro.
// func Load(ctx context.Context, id string) errorNo almacenes Context dentro de structs de larga duración - pásalo como parámetro.
// prefer func (s *Svc) Get(ctx context.Context, id string)Deriva de la solicitud.
// ctx := r.Context()WithCancelCause para razones de cancelación más ricas.
// ctx, cancel := context.WithCancelCause(parent)
// cancel(fmt.Errorf("reason"))Usar Background en medio de la pila pierde la cancelación - pasa el ctx padre.
// incorrecto: context.Background() dentro de helpers de bibliotecaLos timeouts hijos deben ser más cortos que el padre cuando están anidados.
// padre 5s, hijo WithTimeout(padre, time.Second)Ejecuta una función después de la cancelación (Go 1.21+).
// stop := context.AfterFunc(ctx, func() { ... })Los tipos de clave privados evitan colisiones.
type ctxKey struct{}
ctx := context.WithValue(context.Background(), ctxKey{}, 1)
ctx.Value(ctxKey{}) // 1Versiones de Stack: Go 1.26.x · chi/gin/echo latest (verificar en la compilación)
Revisado por Chris St. John·Última actualización: 18 jul 2026