Prácticas recomendadas para el paquete context
Convenciones del equipo para claves de contexto, tiempos de espera y apagado.
Busca en todas las páginas de la documentación
Convenciones del equipo para claves de contexto, tiempos de espera y apagado.
Aplique estas reglas en la revisión de código, la incorporación y las plantillas de servicio para que cada manejador, repositorio y cliente RPC propague la cancelación de manera consistente.
ctx context.Context como el primer parámetro en APIs bloqueantes. Los revisores rechazan nuevas E/S sin contexto.ctx, no c ni context. Coincide con las expectativas de Effective Go y staticcheck.ctx sin cambios, excepto para plazos o valores hijos intencionados. No cree Background() en medio de una solicitud.ctx.Err() cuando la cancelación termine el trabajo. Consérvelo con %w solo al agregar contexto de capa.Query/Exec por las variantes *Context en las rutas de solicitud. Prohíba SQL sin contexto en los manejadores.r.Context() o equivalente del framework. Los envoltorios de chi/gin/echo todavía se mapean a la solicitud.r.WithContext. Los valores y los tiempos de espera cortos envuelven el ctx entrante.context.Canceled sin 500 ruidosos cuando la respuesta no se pueda enviar. Registre en depuración para abandonos del cliente.http.NewRequestWithContext para HTTP saliente. Vincule la vida útil de la dependencia al llamador.ctx a los stubs de gRPC y respete los plazos en el lado del servidor. Traduzca a codes.DeadlineExceeded cuando sea apropiado.Background(). Preserva la cancelación del usuario y los relojes ascendentes.defer cancel() después de WithCancel/WithTimeout/WithDeadline. Evita fugas de temporizadores en pruebas y producción.ctx padre ya esté hecho.Shutdown(ctx) con un contexto limitado al salir del proceso. Empareje con el manejo de señales en main.User(ctx)) en lugar de llamadas Value crudas. Mantiene los tipos de clave privados.ctx.Done() en bucles largos y flujos. Los bucles Recv/Send de gRPC se verifican en cada iteración.context.WithoutCancel solo para trabajo posterior a la respuesta documentado. La facturación y la auditoría son casos comunes.Canceled y DeadlineExceeded. Los tiempos de espera cortos superan time.Sleep en CI.-race en paquetes que generan gorutinas por solicitud. Detecta carreras de cancelación ignoradas.Las reglas de firma de Nivel A y contexto SQL deberían fallar la CI o los bots de revisión.
Las tablas de tiempos de espera y los ADR de valores son políticas del equipo aplicadas en la revisión.
Agregue ctx como primer parámetro en los puntos de entrada exportados, mantenga los envoltorios obsoletos durante una versión y luego elimínelos.
Rastree en un problema de migración por paquete.
Los ayudantes bloqueantes exportados sí; las transformaciones puras no.
Documente qué funciones conocen el contexto en godoc.
Establezca los límites de Transport y aún así pase el ctx por solicitud.
El Client.Timeout global es un respaldo, no un reemplazo para ctx.
El contexto de Reconcile se cancela al apagar el gestor; páselo a las llamadas al cliente.
No almacene en la estructura del reconciliador.
Los servicios de borde utilizan plazos externos más estrictos; los trabajadores por lotes utilizan presupuestos más largos pero aún propagan el ctx de apagado.
Escriba las diferencias en la tabla de tiempos de espera del servicio.
Un paquete compartido internal/ctxkeys funciona para monorepos.
Las bibliotecas publicadas externamente deben poseer sus propias claves.
Envuelva los proveedores que carecen de ctx con tiempos de espera en el límite.
Abra problemas en upstream cuando las APIs bloqueantes no tengan una variante de contexto.
El comportamiento del contexto es el mismo; algunos controladores pueden carecer de cancelación.
Verifique los objetivos de la placa en la compilación según la nota del pie de página de la pila.
Use el ctx del grupo dentro de las gorutinas y cancele al primer error.
Documente el uso de errgroup en el mismo ADR de concurrencia.
Versiones de pila: Esta página se escribió para Go 1.26.x (predeterminado de GC Green Tea, go fix modernizers - verifique el parche en la compilación), chi (última versión - verifique en la compilación), gin (última versión - verifique en la compilación), echo (última versión - verifique en la compilación), google.golang.org/grpc (última versión - verifique en la compilación), sigs.k8s.io/controller-runtime (última versión - verifique en la compilación), kubebuilder (última versión - verifique en la compilación), tinygo (última versión - verifique los objetivos de la placa en la compilación), wazero (última versión - verifique en la compilación) y golangci-lint (última versión - verifique el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026