Fundamentos de Estudios de Caso
11 ejemplos para empezar con Estudios de Caso: 8 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
11 ejemplos para empezar con Estudios de Caso: 8 básicos y 3 intermedios.
site/go/case-studies/ de este sitio junto con tu propio módulo.go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest para comparar la postura del linter con las compilaciones de referencia.Antes de leer el código, lista los SLO, el objetivo de despliegue y las dependencias externas de la historia.
# Contrato de compilación de referencia REST (ejemplo)
- Objetivo: Despliegue en Kubernetes detrás de Ingress
- SLO: p99 < 100ms para endpoints de lectura a 500 RPS
- Dependencias: Postgres, colector OTel, scrape de Prometheuscmd/, internal/, migraciones, fragmentos de Helm o manifiestos.Relacionado: Aprender de Sistemas Go en Producción - Por qué importan los estudios de caso
Dibuja el protocolo entrante hasta las dependencias salientes antes de abrir los archivos de implementación.
Cliente -> Ingress -> middleware chi -> manejador -> servicio -> tienda -> Postgres
|-> slog + span de traza
|-> /healthz /readyzRelacionado: Compilación de Referencia: Microservicio REST Cloud-Native - Corte HTTP completo
Lista qué paquetes pueden importar cuáles otros en la disposición de referencia.
// Dirección permitida en compilaciones de referencia típicas:
// cmd/api -> internal/http -> internal/service -> internal/store
// internal/service no debe importar cmd/apiinternal/ significa "no es una API de módulo público". Las compilaciones de referencia mantienen la integración en los bordes.Relacionado: Antes/Después: Refactorización de un Paquete Dios - Historia de reparación de límites
Copia los requisitos de señales, no el JSON del panel.
// Nombres mínimos de métricas estilo RED a buscar en una compilación de referencia
var (
httpRequests = prometheus.NewCounterVec(/* ... */)
httpDuration = prometheus.NewHistogramVec(/* ... */)
)slog con IDs de solicitud en las compilaciones HTTP.Relacionado: Go en Producción: Logs, Métricas, Trazas y Señales - Vocabulario de señales
Encuentra primero las pruebas de tabla y las etiquetas de compilación de integración.
func TestServiceCreateUser(t *testing.T) {
tests := []struct {
name string
input CreateUserInput
wantErr bool
}{
{name: "valid email", input: CreateUserInput{Email: "a@b.co"}},
{name: "empty email", input: CreateUserInput{}, wantErr: true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// ...
})
}
}httptest registra los contratos del manejador sin iniciar un puerto real.Relacionado: Pruebas de Tabla y Subpruebas - Estilo de prueba utilizado en todas las compilaciones
Estudia cómo los comandos cobra, la configuración y los artefactos se alinean.
# Señales de higiene de CLI de producción en compilaciones de referencia
goreleaser release --clean
cosign sign-blob --key kms://... dist/myctl_linux_amd64.tar.gz
myctl version --output jsonversion, serve y migrate.Relacionado: Compilación de Referencia: CLI de Producción con cobra - Corte de CLI de extremo a extremo
Localiza los patrones de control de flujo y streaming en las historias del plano de datos.
func (s *server) StreamEvents(req *pb.SubscribeRequest, stream pb.Events_StreamEventsServer) error {
for evt := range s.bus.Subscribe(req.GetTopic()) {
if err := stream.Send(evt); err != nil {
return err // desconexión del cliente o control de flujo
}
}
return nil
}Relacionado: Compilación de Referencia: Plano de Datos gRPC de Alto Rendimiento - Corte de streaming
Recopila Dockerfile, rutas de sonda y manejadores de apagado elegante.
readinessProbe:
httpGet:
path: /readyz
port: 8080
periodSeconds: 5/healthz y /readyz por separado.CGO_ENABLED=0 para binarios estáticos.SIGTERM y vacía las solicitudes en curso.Relacionado: Sondas de Salud, Preparación y Vivacidad - Semántica de las sondas
Reproduce los pasos del estudio de caso de benchmark contra tus métricas de staging.
go test -bench=. -benchmem ./internal/api/...
curl -s localhost:6060/debug/pprof/profile?seconds=30 > cpu.prof
go tool pprof -top cpu.profalloc_space y wall antes de cambiar las capas JSON o SQL.Relacionado: Estudio de Caso de Benchmark: Latencia de API JSON - Historia de p99 de 200ms a 20ms
Para material de referencia del operador de Kubernetes, rastrea los bucles spec → status.
func (r *WidgetReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
var widget examplev1.Widget
if err := r.Get(ctx, req.NamespacedName, &widget); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
// compara la generación, parchea el estado, vuelve a encolar en error transitorio
return ctrl.Result{}, nil
}envtest ejecuta la lógica del controlador sin un clúster real para una retroalimentación rápida.Relacionado: Compilación de Referencia: Operador de Kubernetes de Extremo a Extremo - De CRD a bundle
Lee las exportaciones del módulo TinyGo junto con la incrustación host de wazero.
// Host carga el guest; el guest exporta _start o WASI main
mod, err := runtime.InstantiateModule(ctx, compiled, wazero.NewModuleConfig().
WithStdout(os.Stdout))Relacionado: Compilación de Referencia: Módulo Edge WASI con Host wazero - Corte de módulo edge
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado GC de Green Tea,
go fixmodernizadores - verifica el parche en la compilación), chi (última versión - verifica en la compilación), gin (última versión - verifica en la compilación), echo (última versión - verifica en la compilación), google.golang.org/grpc (última versión - verifica en la compilación), sigs.k8s.io/controller-runtime (última versión - verifica en la compilación), kubebuilder (última versión - verifica en la compilación), tinygo (última versión - verifica los objetivos de placa en la compilación), wazero (última versión - verifica en la compilación) y golangci-lint (última versión - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026