Sesiones de Par y Mob para Equipos Go
Patrones de transferencia de conocimiento para modismos y concurrencia.
Busca en todas las páginas de la documentación
Patrones de transferencia de conocimiento para modismos y concurrencia.
Los modismos de Go se aprenden a través de bucles de retroalimentación sobre código real.
El emparejamiento y el mobbing estructurados comprimen meses de prueba y error en sesiones enfocadas que también difunden la cultura de revisión.
El emparejamiento y el mobbing son formatos deliberados para compartir hábitos de la cadena de herramientas, patrones de manejo de errores y juicio de revisión de concurrencia.
Complementan las rutas de lectura y las listas de verificación con la explicación en vivo de por qué un revisor bloquearía un PR.
Las sesiones cortas con agendas claras superan el intercambio de pantalla no estructurado.
Tarjeta de referencia rápida - lista para copiar y pegar.
## Par de incorporación de 90 minutos (plantilla)
1. (15m) El navegador recorre la estructura del módulo + README de CI
2. (25m) El conductor soluciona un problema de golangci-lint con la orientación del navegador
3. (25m) Lectura conjunta de una ruta de código concurrente; ejecuta go test -race
4. (15m) Debrief: tres modismos para aplicar + un PR para abrir antes de la próxima sesión
5. (10m) Programa la próxima sesión + asigna enlace de prelecturaCuándo usar esto:
Un equipo ejecuta un mob de concurrencia semanal sobre un error en staging: recuento elevado de gorutinas después del despliegue.
// El mob examina este patrón juntos - el conductor comparte pantalla
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 de refactorización al que apunta el mob - ticker con 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
}
}
}
}Lo que esto demuestra:
time.After en bucles asigna temporizadores; la solución idiomática usa NewTicker y Stop.go test -race antes de fusionar la corrección.| Formato | Duración | Mejor para |
|---|---|---|
| Par de incorporación | 60-90 min | Cadena de herramientas, primer PR, normas de godoc |
| Par de revisión | 30-45 min | Revisión pre-envío del PR del autor |
| Mob de concurrencia | 60-120 min | Canales, alcance de mutex, errgroup |
| Mob de repetición de incidentes | 45-90 min | pprof, logs, correlación de despliegue |
| Mob de diseño de API | 60 min | Superficie exportada antes de codificar |
// Ejercicio de emparejamiento: esqueleto de subprueba basado en tabla que esperan los revisores
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)
}
})
}
}Usa ejercicios como este cuando la retroalimentación de la revisión diga "añadir casos" pero el autor no haya visto pruebas ejemplares en tu repositorio.
-race durante los pares de concurrencia - los nuevos empleados piensan que las pruebas verdes significan concurrencia segura. Solución: haz que la ejecución de race sea un criterio de salida de la sesión.| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| Ruta de lectura auto-guiada | El nuevo empleado necesita tiempo de enfoque tranquilo | La concurrencia o la cultura de revisión son la brecha |
| Formación formal en aula | Gran cohorte de incorporación la misma semana | El diseño del repositorio específico del equipo es importante |
| Solo revisión asíncrona | Zonas horarias distribuidas | El nuevo empleado aún no ha visto discusiones de PR ejemplares |
| Trabajo individual asistido por agente | Pruebas y documentación de boilerplate | Enseñar juicio sobre la forma y seguridad de la API |
Diariamente o cada dos días en las semanas 1-2, luego dos veces por semana hasta el día 60. Reduce a medida que disminuye la tasa de reproceso de revisiones.
De tres a cinco ingenieros. Por encima de seis, el tiempo de aire por persona disminuye a menos que uses rotación estricta.
No. El emparejamiento es aprendizaje; la revisión es rendición de cuentas. El código emparejado todavía pasa por el proceso normal de PR.
Compartir en vivo del IDE, compartir pantalla con intercambio de control del conductor, o emparejamiento estilo tuple. Prueba el audio antes de inmersiones profundas en concurrencia.
Rastrea las rondas de reproceso de revisiones, el tiempo hasta la primera fusión y las encuestas de confianza de los nuevos empleados a los 30 y 60 días.
Sí, para la repetición después de la mitigación. Evita ediciones de producción en vivo durante el mob a menos que el comandante del incidente lo apruebe.
Enlaza una página del sitio (por ejemplo, el bloque de Ruta de Lectura de Go Efectivo) y un PR fusionado ejemplar por tema de sesión.
Solapa de 2-4 horas para emparejamiento en tiempo real; de lo contrario, usa pares de revisión asíncronos con Loom grabado y preguntas escritas.
Cuando el nuevo empleado aprueba los ítems 13-18 de la lista de verificación de 30/60/90 con un reproceso mínimo, generalmente alrededor del día 45-60.
Opcional para mobs de diseño de API. Omite los pares de implementación de rutina a menos que estén contribuyendo con criterios de aceptación.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, go fix modernizers - verifica el parche en la compilación), chi (última - verifica en la compilación), gin (última - verifica en la compilación), echo (última - verifica en la compilación), google.golang.org/grpc (última - verifica en la compilación), sigs.k8s.io/controller-runtime (última - verifica en la compilación), kubebuilder (última - verifica en la compilación), tinygo (última - verifica objetivos de placa en la compilación), wazero (última - verifica en la compilación) y golangci-lint (última - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 16 jul 2026