Noções Básicas de Estudos de Caso
11 exemplos para você começar com Estudos de Caso - 8 básicos e 3 intermediários.
Busque em todas as páginas da documentação
11 exemplos para você começar com Estudos de Caso - 8 básicos e 3 intermediários.
site/go/case-studies/ deste site junto com seu próprio módulo.go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest para comparar a postura de linting com builds de referência.Antes de ler o código, liste os SLOs, o alvo de implantação e as dependências externas para a história.
# Contrato de build de referência REST (exemplo)
- Alvo: Implantação Kubernetes atrás de Ingress
- SLO: p99 < 100ms para endpoints de leitura a 500 RPS
- Dependências: Postgres, coletor OTel, scrape Prometheuscmd/, internal/, migrações, trechos de Helm ou manifestos.Relacionado: Aprendendo com Sistemas Go de Produção - Por que os estudos de caso importam
Desenhe o protocolo de entrada para as dependências de saída antes de abrir os arquivos de implementação.
Cliente -> Ingress -> middleware chi -> handler -> service -> store -> Postgres
|-> slog + trace span
|-> /healthz /readyzRelacionado: Build de Referência: Microserviço REST Cloud-Native - Fatia HTTP completa
Liste quais pacotes podem importar quais outros no layout de referência.
// Direção permitida em builds de referência típicos:
// cmd/api -> internal/http -> internal/service -> internal/store
// internal/service não deve importar cmd/apiinternal/ significa "não é uma API de módulo pública". Builds de referência mantêm a integração nas bordas.Relacionado: Antes/Depois: Refatorando um Pacote God - História de reparo de limites
Copie os requisitos de sinal, não o JSON do dashboard.
// Nomes mínimos de métricas estilo RED para procurar em um build de referência
var (
httpRequests = prometheus.NewCounterVec(/* ... */)
httpDuration = prometheus.NewHistogramVec(/* ... */)
)slog com IDs de requisição em builds HTTP.Relacionado: Produção Go: Logs, Métricas, Rastreamentos e Sinais - Vocabulário de sinais
Encontre testes orientados por tabela e tags de build de integração primeiro.
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 contratos de handler sem iniciar uma porta real.Relacionado: Testes Orientados por Tabela e Subtestes - Estilo de teste usado em todos os builds
Estude como os comandos cobra, a configuração e os artefatos se alinham.
# Sinais de higiene de CLI de produção em builds de referência
goreleaser release --clean
cosign sign-blob --key kms://... dist/myctl_linux_amd64.tar.gz
myctl version --output jsonversion, serve e migrate.Relacionado: Build de Referência: CLI de Produção com cobra - Fatia CLI de ponta a ponta
Localize o controle de fluxo e os padrões de streaming em histórias de data plane.
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 // desconexão do cliente ou controle de fluxo
}
}
return nil
}Relacionado: Build de Referência: Data Plane gRPC de Alta Vazão - Fatia de streaming
Colete Dockerfile, caminhos de sonda e manipuladores de desligamento gracioso.
readinessProbe:
httpGet:
path: /readyz
port: 8080
periodSeconds: 5/healthz e /readyz separadamente.CGO_ENABLED=0 para binários estáticos.SIGTERM e drena requisições em andamento.Relacionado: Sondas de Saúde, Readiness e Liveness - Semântica das sondas
Reexecute as etapas do estudo de caso de benchmark contra suas 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 e wall antes de alterar as camadas JSON ou SQL.Relacionado: Estudo de Caso de Benchmark: Latência de API JSON - História de p99 de 200ms para 20ms
Para material de referência de operador Kubernetes, rastreie loops 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)
}
// compare generation, patch status, requeue on transient error
return ctrl.Result{}, nil
}Relacionado: Build de Referência: Operador Kubernetes de Ponta a Ponta - CRD para bundle
Leia as exportações de módulos TinyGo ao lado da incorporação do host wazero.
// Host carrega o guest; guest exporta _start ou WASI main
mod, err := runtime.InstantiateModule(ctx, compiled, wazero.NewModuleConfig().
WithStdout(os.Stdout))Relacionado: Build de Referência: Módulo de Borda WASI com Host wazero - Fatia de módulo de borda
Versões da Stack: Esta página foi escrita para Go 1.26.x (padrão GC Green Tea, go fix modernizers - verifique o patch na build), chi (última versão - verifique na build), gin (última versão - verifique na build), echo (última versão - verifique na build), google.golang.org/grpc (última versão - verifique na build), sigs.k8s.io/controller-runtime (última versão - verifique na build), kubebuilder (última versão - verifique na build), tinygo (última versão - verifique os alvos de placa na build), wazero (última versão - verifique na build) e golangci-lint (última versão - verifique o conjunto de linters na build).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026