Go Service Modernization Checklist
A modernization checklist for Go services. It covers Go modules, context propagation, slog logging, OpenTelemetry, race detection, vulnerability scanning, and graceful shutdown.
When to Use This Checklist
Use this checklist to modernize a Go service for production operation. Older Go services predate modules, the standard slog logger, and current observability practices. Modernizing brings the service in line with idiomatic Go and makes it observable, resilient, and secure. It applies to both legacy GOPATH projects and services that simply drifted behind current practice.
How to Use This Checklist
Start with the build: migrate to Go modules and upgrade to a supported version. Then work on runtime correctness, propagating context.Context through all I/O so requests can be cancelled and bounded by deadlines. Add structured logging with slog and OpenTelemetry instrumentation so the service is observable. Run go vet, staticcheck, and the race detector in CI, and scan dependencies with govulncheck.
Graceful shutdown and load-tested SLOs are required before production; image hardening and GOMAXPROCS tuning are valuable optimizations.
What Good Looks Like
A modernized Go service builds with pinned Go modules on a supported version, threads context through every call, and logs structurally with slog. OpenTelemetry traces and metrics are live, the CI pipeline runs static analysis and the race detector, and govulncheck is clean. The service shuts down gracefully on SIGTERM and meets load-tested SLOs in a minimal container.
Common Pitfalls
The most common gap is ignoring context.Context, leaving requests unable to cancel and goroutines leaking. Teams skip the race detector and ship subtle concurrency bugs. Unstructured log lines make production debugging hard. Missing graceful shutdown causes dropped requests during rolling deployments.
Related Resources
See the twelve-factor app for runtime hygiene, OpenTelemetry instrumentation guidelines and structured logging for observability, service-level objectives for performance targets, and the container image hardening guide for the build.