Boas Práticas de Reflexão e Geração de Código
Escolha reflexão para frameworks, geração de código para caminhos de alta frequência (hot paths).
Busque em todas as páginas da documentação
Escolha reflexão para frameworks, geração de código para caminhos de alta frequência (hot paths).
Estas regras transformam os artigos sobre reflexão e geração de código nesta seção em hábitos revisáveis para bibliotecas, serviços e equipes de plataforma.
pprof e benchmarks para provar que a reflexão é um gargalo, não uma suposição.Marshaler/Unmarshaler em tipos de alta frequência comprovados antes de adotar um novo framework gerador de JSON.validate, json, db, customizada).Tag.Lookup quando a presença da chave for importante; não confie apenas em Get para detectar chaves ausentes.json duplicados e sintaxe de tag inválida.reflect.Type e cacheie os planos de campo em sync.Map ou na inicialização do pacote.// Code generated ... DO NOT EDIT a menos que todos os consumidores executem geradores sempre.go generate ./... produzir um diff para que a deriva seja capturada antes do merge.tools.go (tag de build tools) e instale essa versão na CI.format.Source a saída do gerador para que os verificadores gofmt passem.testdata/.-benchmem ao comparar caminhos de JSON/ORM reflexivos com alternativas geradas.reflect.* em perfis de CPU em manipuladores de marshal, scan e validação.go fix e go test ./....//go:fix inline em shims de encaminhamento ao renomear ou mover símbolos, com Deprecated: godoc.go fix -diff em repositórios grandes antes de aplicar alterações abrangentes.go fix duas vezes em branches de atualização quando as notas de lançamento recomendarem passes sinérgicos.Não.
Banir reflexão por solicitação sem medição.
A inicialização do framework e as ferramentas administrativas são aceitáveis.
Quando benchmarks e SLOs provam que serializadores reflexivos ou scans de ORM dominam a CPU ou as alocações.
Não antes que existam evidências.
Proprietários de plataforma ou serviço adicionam a etapa ao pipeline padrão.
A mesma equipe revisa os aumentos de versão do gerador.
Commits separados: um para alterações de tipo escritas manualmente, um apenas para a saída de go generate.
Sim.
Padrão comum: refletir uma vez na inicialização, gerar código para tipos de alta frequência por solicitação.
Aceite o custo da reflexão para velocidade em caminhos de baixo QPS.
Introduza sqlc/ent ou DTOs finos quando os perfis exigirem.
A deprecação informa aos humanos para migrarem.
Shims inline permitem que go fix automatize os sites de chamada quando existem funções de encaminhamento.
Sim, para ensino.
O código de produção no mesmo serviço deve seguir as regras acima.
Aponte-os para Fundamentos de Reflexão, depois para esta lista durante a primeira revisão de API ou ORM.
govet, errcheck, analisadores de tags de struct e verificações de diff de go generate em CI.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, modernizadores go fix - 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 de 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: 16 de jul. de 2026