Boas Práticas do Pacote context
Convenções de equipe para chaves de context, timeouts e desligamento.
Busque em todas as páginas da documentação
Convenções de equipe para chaves de context, timeouts e desligamento.
Aplique estas regras em revisões de código, integração e modelos de serviço para que cada handler, repositório e cliente RPC propague o cancelamento de forma consistente.
ctx context.Context como o primeiro parâmetro em APIs bloqueantes. Revisores rejeitam novas I/Os sem context.ctx, não c ou context. Corresponde às expectativas do Effective Go e do staticcheck.ctx inalterado, exceto por deadlines ou valores de filhos intencionais. Sem Background() novo no meio da requisição.ctx.Err() quando o cancelamento encerrar o trabalho. Preserve com %w apenas ao adicionar context de camada.Query/Exec por variantes *Context em caminhos de requisição. Proíba SQL sem context em handlers.r.Context() ou equivalente de framework. Wrappers chi/gin/echo ainda mapeiam para a requisição.r.WithContext. Valores e timeouts curtos envolvem o ctx de entrada.context.Canceled sem logs 500 barulhentos quando a resposta não puder ser enviada. Registre em debug para abortos de cliente.http.NewRequestWithContext para HTTP de saída. Vincule o tempo de vida da dependência ao chamador.ctx para stubs gRPC e honre deadlines no lado do servidor. Traduza para codes.DeadlineExceeded quando apropriado.Background(). Preserva o cancelamento do usuário e os relógios upstream.defer cancel() após WithCancel/WithTimeout/WithDeadline. Evita vazamentos de timer em testes e produção.ctx pai já estiver concluído.Shutdown(ctx) com um context limitado ao sair do processo. Emparelhe com o tratamento de sinais em main.User(ctx)) em vez de chamadas Value brutas. Mantém os tipos de chave privados.ctx.Done() em loops longos e streams. Loops Recv/Send do gRPC verificam cada iteração.context.WithoutCancel apenas para trabalho pós-resposta documentado. Cobrança e auditoria são casos comuns.Canceled e DeadlineExceeded. Timeouts curtos superam time.Sleep em CI.-race em pacotes que criam goroutines por requisição. Detecta corridas de cancelamento ignoradas.As regras de assinatura da Categoria A e de SQL-context devem falhar na CI ou nos bots de revisão.
Tabelas de timeout e ADRs de valores são políticas de equipe aplicadas na revisão.
Adicione ctx como primeiro parâmetro nos pontos de entrada exportados, mantenha wrappers obsoletos por uma release, depois exclua.
Rastreie em um problema de migração por pacote.
Helpers bloqueantes exportados sim; transformações puras não.
Documente quais funções estão cientes do context no godoc.
Defina limites em Transport e ainda passe o ctx por requisição.
O Client.Timeout global é um backup, não um substituto para ctx.
O context do Reconcile cancela no desligamento do manager - passe-o para chamadas de cliente.
Não armazene na struct do reconciliador.
Serviços de borda usam deadlines externos mais rigorosos; workers em lote usam orçamentos mais longos, mas ainda propagam o ctx de desligamento.
Escreva as diferenças na tabela de timeouts do serviço.
Um pacote compartilhado internal/ctxkeys funciona para monorepos.
Bibliotecas publicadas externamente devem possuir suas próprias chaves.
Envolva fornecedores que não possuem ctx com timeouts na fronteira.
Abra issues upstream quando APIs bloqueantes não tiverem variante de context.
O comportamento do context é o mesmo; alguns drivers podem não ter cancelamento.
Verifique os alvos da placa nas notas de rodapé de compilação por pilha.
Use o ctx do grupo dentro das goroutines e cancele no primeiro erro.
Documente o uso do errgroup no mesmo ADR de concorrência.
Versões da Stack: Esta página foi escrita para Go 1.26.x (padrão GC Green Tea, go fix modernizers - verifique o patch na compilação), chi (latest - verifique na compilação), gin (latest - verifique na compilação), echo (latest - verifique na compilação), google.golang.org/grpc (latest - verifique na compilação), sigs.k8s.io/controller-runtime (latest - verifique na compilação), kubebuilder (latest - verifique na compilação), tinygo (latest - verifique os alvos da placa na compilação), wazero (latest - verifique na compilação) e golangci-lint (latest - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026