Sessões de Pair & Mob para Equipes Go
Padrões de transferência de conhecimento para idiomas e concorrência.
Busque em todas as páginas da documentação
Padrões de transferência de conhecimento para idiomas e concorrência.
Idiomas Go são aprendidos através de loops de feedback em código real.
Pair programming e mob programming estruturados comprimem meses de tentativa e erro em sessões focadas que também disseminam a cultura de revisão.
Pair programming e mob programming são formatos deliberados para compartilhar hábitos de toolchain, padrões de tratamento de erros e julgamento de revisão de concorrência.
Eles complementam caminhos de leitura e checklists com explicação ao vivo do porquê um revisor bloquearia um PR.
Sessões curtas com agendas claras superam o compartilhamento de tela não estruturado.
Cartão de receita de referência rápida - pronto para copiar e colar.
## Pair de onboarding de 90 minutos (modelo)
1. (15m) Navigator percorre o layout do módulo + README de CI
2. (25m) Driver corrige um problema do golangci-lint com orientação do navigator
3. (25m) Leitura conjunta de um caminho de código concorrente; execute `go test -race`
4. (15m) Debrief: três idiomas para aplicar + um PR para abrir antes da próxima sessão
5. (10m) Agende a próxima sessão + atribua link de pré-leituraQuando usar isso:
Uma equipe executa um mob de concorrência semanal em um bug de staging: contagem elevada de goroutines após o deploy.
// O Mob examina este padrão em conjunto - o driver compartilha a tela
func (s *Service) poll(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-time.After(time.Second):
if err := s.tick(ctx); err != nil {
return err
}
}
}
}// Resultado da refatoração que o mob visa - ticker com defer Stop
func (s *Service) poll(ctx context.Context) error {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-ticker.C:
if err := s.tick(ctx); err != nil {
return err
}
}
}
}O que isso demonstra:
time.After em loops aloca timers; a correção idiomática usa NewTicker e Stop.go test -race antes de mesclar a correção.| Formato | Duração | Ideal para |
|---|---|---|
| Pair de Onboarding | 60-90 min | Toolchain, primeiro PR, normas de godoc |
| Pair de Revisão | 30-45 min | Revisão pré-submissão do PR do autor |
| Mob de Concorrência | 60-120 min | Canais, escopo de mutex, errgroup |
| Mob de Replay de Incidente | 45-90 min | pprof, logs, correlação de deploy |
| Mob de Design de API | 60 min | Superfície exportada antes de codificar |
// Exercício de Pairing: esqueleto de subteste baseado em tabela que os revisores esperam
func TestLimiter(t *testing.T) {
cases := []struct {
name string
n int
want int
}{
{"zero", 0, 0},
{"one", 1, 1},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if got := Limiter(tc.n); got != tc.want {
t.Fatalf("got %d want %d", got, tc.want)
}
})
}
}Use exercícios como este quando o feedback da revisão disser "adicione casos", mas o autor ainda não viu testes exemplares em seu repositório.
-race durante pairs de concorrência - contratados pensam que testes verdes significam concorrência segura. Correção: torne a execução do race um critério de saída da sessão.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Caminho de leitura self-service | Contratado precisa de tempo de foco silencioso | Concorrência ou cultura de revisão é a lacuna |
| Treinamento formal em sala de aula | Grande coorte de onboarding na mesma semana | O layout específico do repositório da equipe é importante |
| Apenas revisão assíncrona | Fusos horários distribuídos | Contratado ainda não viu discussão de PR exemplar |
| Trabalho solo assistido por agente | Testes e documentação de boilerplate | Ensinando julgamento sobre forma e segurança da API |
Diariamente ou a cada dois dias nas semanas 1-2, depois duas vezes por semana até o dia 60. Reduza à medida que a taxa de retrabalho de revisão diminui.
Três a cinco engenheiros. Acima de seis, o tempo de fala por pessoa diminui, a menos que você use rotação estrita.
Não. Pairing é aprendizado; revisão é responsabilidade. Código em pair ainda passa pelo processo normal de PR.
Compartilhamento ao vivo do IDE, compartilhamento de tela com troca de controle do driver ou pairing estilo tuple. Teste o áudio antes de mergulhos profundos em concorrência.
Acompanhe as rodadas de retrabalho de revisão, o tempo para o primeiro merge e pesquisas de confiança do contratado em 30 e 60 dias.
Sim, para replay após a mitigação. Evite edições de produção ao vivo durante o mob, a menos que o comandante do incidente aprove.
Vincule uma página do site (por exemplo, o bloco de Caminho de Leitura de Go Eficaz) e um PR mesclado exemplar por tema da sessão.
Sobreposição de 2-4 horas para pairing em tempo real; caso contrário, use pair de revisão assíncrono com loom gravado e perguntas escritas.
Quando o contratado passar pelos itens 13-18 da checklist 30/60/90 com retrabalho mínimo, geralmente por volta do dia 45-60.
Opcional para mobs de design de API. Pule pares de implementação rotineiros, a menos que eles estejam contribuindo com critérios de aceitação.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizers - verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os alvos de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026