Melhores Práticas de Banco de Dados e Acesso a Dados
Deadlines de contexto, dimensionamento de pool e observabilidade para consultas.
Busque em todas as páginas da documentação
Deadlines de contexto, dimensionamento de pool e observabilidade para consultas.
Aplique estas regras em revisões de código, templates de serviço e runbooks para que todo handler, repositório e worker trate SQL como um recurso compartilhado com propriedade clara e limites de cancelamento.
Query sem Context) onde possível.*sql.DB por DSN por processo, configurado em main. Evite abrir bancos de dados de produção em init().MaxOpenConns com base em cálculos de capacidade (db_max / replicas). Previne incidentes de too many connections (muitas conexões).PingContext na inicialização com timeout de boot. Falhe a implantação antes que o tráfego atinja DSNS ruins.db.Stats() para métricas (WaitCount, InUse, Idle). Alerte sobre o crescimento da espera no pool.*Context em todo caminho com escopo de requisição. Proíba Query/Exec sem Context em handlers.ctx do handler ou RPC, não de Background(). Preserva o cancelamento do cliente.statement_timeout do SQL quando os drivers demorarem. Defesa em profundidade para consultas descontroladas.ctx.Err() quando o cancelamento encerrar uma consulta. Mapeie para o status HTTP/gRPC correto na borda.sql.ErrNoRows para sentinelas de domínio ErrNotFound. Não vaze erros do driver para clientes de API.repo.GetOrder). Evite logar SQL completo com segredos em produção.rows e stmt com defer em repositórios. Vazamentos esgotam o pool.defer tx.Rollback() imediatamente após BeginTx. Faça o Commit apenas no caminho de sucesso.down ou irreversibilidade documentada na revisão de migração. CI aplica up em DBs efêmeros.*sql.DB subjacente. ORM não remove o trabalho de operações.Preload em caminhos críticos.ctx para handlers Redis/NATS/Kafka. O desligamento drena workers cooperativamente.-race em código que compartilha repositórios entre goroutines. Captura estado compartilhado inseguro acima do SQL.Métodos SQL de Contexto da Camada A, SQL apenas com placeholders e a CI de migração devem bloquear o merge.
Tabelas de ajuste de pool e política de TTL de cache são aplicadas por revisão.
Extraia o SQL para um pacote de armazenamento por trás de uma interface, injete a partir de main, mantenha as assinaturas do handler inalteradas, um PR de cada vez.
Sim, quando você roteia repositórios somente leitura para um DSN seguidor.
Documente a consistência eventual nos contratos da API.
Passe o ctx de reconciliação para chamadas de repositório; não armazene *sql.DB na struct do reconciliador sem padrões de injeção de main.
Habilite linters que capturam uso incorreto de contexto e tratamento de erros; regras de revisão personalizadas para SQL em handlers.
APIs de borda usam timeouts de DB mais curtos; workers em lote usam orçamentos mais longos, mas ainda propagam o ctx de desligamento.
Escreva as diferenças na tabela de timeouts.
Exija WithContext, inspecione o SQL gerado em staging, proíba sessões globais sem contexto de requisição.
Latência de consulta p95/p99, taxa de erro por operação, atraso na versão de migração, taxa de acerto de cache, atraso do consumidor.
Contexto e higiene SQL sim; dimensionamento de pool e escolhas de ORM podem diferir em alvos restritos.
Verifique os alvos da placa na compilação.
As regras de banco de dados estendem as Melhores Práticas do Pacote Context com políticas específicas de pool e migração de armazenamento.
Versões de 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 (última - verifique na compilação), gin (última - verifique na compilação), echo (última - verifique na compilação), google.golang.org/grpc (última - verifique na compilação), sigs.k8s.io/controller-runtime (última - verifique na compilação), kubebuilder (última - verifique na compilação), tinygo (última - verifique os alvos da placa na compilação), wazero (última - verifique na compilação) e golangci-lint (última - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026