Revisão de Código com PRs do GitHub
Pull requests (PRs) são o portão de integração para repositórios de módulos Go.
Busque em todas as páginas da documentação
Pull requests (PRs) são o portão de integração para repositórios de módulos Go.
Uma revisão eficaz mantém as alterações pequenas, aponta o impacto do go.mod e verifica os testes – não apenas opiniões de estilo.
Um bom PR Go declara a mudança de comportamento, o impacto no módulo/API e como os testes foram executados.
Revisores analisam deltas de API exportada, tratamento de erros, concorrência e diffs de dependência antes de aprovar.
PRs grandes atrasam o trunk; divida por pacote ou feature flag quando possível.
Cartão de receita de referência rápida – pronto para copiar e colar.
Título do PR: internal/parse: rejeitar entrada vazia em Decode
Modelo de corpo do PR:
## Resumo
- Rejeita entrada vazia em `Decode` com `ErrEmptyInput`
## Impacto no módulo
- Sem novas dependências
- A variável de erro exportada é uma adição compatível
## Plano de testes
- [ ] go test ./...
- [ ] go vet ./...
- [ ] go mod tidy (sem diff)
## Capturas de tela / logs
N/AQuando usar isso:
Um contribuidor abre um PR adicionando verificações de saúde gRPC:
// internal/health/grpc.go (excerto)
package health
import "google.golang.org/grpc/health/grpc_health_v1"
func Register(s *grpc.Server) {
srv := grpc_health_v1.NewHealthServer()
grpc_health_v1.RegisterHealthServer(s, srv)
}# excerto do go.mod
+ google.golang.org/grpc v1.68.0Checklist do revisor:
go test ./... está verde na CI.internal/ além do limite do módulo.Aprovação após o autor documentar a flag de opt-out e a verificação de tidy passar.
O que isso demonstra:
go.mod como primeira classe, não como ruído.main.A fila de merge do GitHub (opcional) serializa os merges para manter o trunk verde sob carga.
| Tamanho | Linhas (aprox.) | Resultado da Revisão |
|---|---|---|
| Pequeno | menos de 200 | Merge no mesmo dia provável |
| Médio | 200-400 | Necessita de tempo de revisão focado |
| Grande | 400+ | Dividir, a menos que seja renomeação mecânica |
Alterações mecânicas (go fix, atualização de protobuf gerado) podem exceder os limites se isoladas e rotuladas.
| Área | Pergunta |
|---|---|
| Símbolos exportados | Isso promete compatibilidade para consumidores do módulo? |
go.mod | Novo peso transitivo? Versão justificada? |
internal/ | Alguma importação interna ilegal entre módulos? |
| Erros | Empacotados com %w? Erros sentinela vs dinâmicos documentados? |
| Concorrência | Ciclo de vida da goroutine, cancelamento de contexto, data races? |
| Testes | Baseados em tabela? Cobrem caminhos de erro? Vale a pena usar -race? |
/v2 ou bump principal?benchstat.Solicite alterações para correção, segurança do módulo ou testes ausentes.
Comentários de "nitpicks" devem ser opcionais (prefixo nit:).
Aprove quando os problemas forem menores e confie em issues de acompanhamento do autor para débitos técnicos.
go.sum em massa - Pode ocultar uma troca na cadeia de suprimentos. Correção: leia go mod why -m para novos módulos.gh pr checkout ou confie na matriz de CI.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Programação em par | Picos de design complexos | Equipe distribuída assíncrona |
| PRs empilhados | Alterações sequenciais dependentes | Revisores sem ferramentas de stack |
| Solicitação automática via CODEOWNERS | Propriedade de monorepo grande | Biblioteca pequena de duas pessoas |
| Merge do mantenedor sem PR | Hotfix de emergência | Fluxo normal de recursos |
Mire em uma única mudança lógica que os revisores possam manter na memória de trabalho.
Separe refatorações de mudanças de comportamento entre PRs.
Para mudanças arriscadas, sim: gh pr checkout <n> então go test ./....
CI verde é necessário, mas nem sempre suficiente.
Verifique o changelog e os avisos de segurança para módulos atualizados.
Execute testes e inspecione go mod why para caminhos inesperados.
breaking, module-deps, needs-changelog, security.
Filtra notas de lançamento e prioridade de revisão.
Prefira um PR de renomeação mecânica separado das mudanças de comportamento.
Revisão mais fácil e bisect mais limpo.
Use PRs draft.
Converta para pronto apenas quando a descrição, testes e tidy estiverem completos.
Comente nas entradas do gerador ou nos alvos do Makefile, não diretamente nas linhas de *.pb.go.
Regenere em um commit de acompanhamento.
Rastreie os caminhos de chamada de manipuladores HTTP/gRPC para o trabalho em segundo plano.
Faltas de verificações de ctx.Done() são bloqueadores de lançamento.
Sim para API exportada ou comportamento em que os consumidores dependem.
Aplicativos podem usar notas de lançamento apenas no momento da tag.
Dentro de um dia útil mantém o fluxo do trunk saudável.
Defina SLA da equipe e alterne o dever de revisão.
Ok quando as verificações exigidas são fortes e os limites de tamanho de PR são aplicados.
Evite para bumps de dependência sem uma olhada humana.
Liste todos os go.mod tocados.
Confirme se diretivas de workspace ou replace não foram acidentalmente commitadas.
Versões da 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: 19 de jul. de 2026