About go-best-practices
A Go development skill that collects practices for application structure, concurrency, configuration, testing, logging, and linting. It is for developers building Go binaries and long-running services, with concise rules and a linked pattern reference for code examples.
Key features
- 01Minimal main and shared bootstrap
- 02Ordered shutdown and non-blocking fanout
- 03Deterministic concurrency and leak tests
- 04Layered config and platform paths
- 05Secret-redacting debug logs
- 06Golden tests and focused linters
Use cases
- 01Structuring a new Go binary
- 02Managing shutdown in a long-running service
- 03Testing goroutines and channel behavior
- 04Setting config precedence across sources
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ poteto/ noodle --skill go-best-practicesAfter installing, type/go-best-practicesin Claude Code to confirm it loaded.
Bundled filesreferences/patterns.md
Details
From the project READMEGo Best Practices
| Pattern | When to apply |
|---|---|
| Minimal main | New binaries |
| Single bootstrap | App wiring across modes |
| Ordered shutdown | Long-running processes |
| Non-blocking fanout | Channel-based event systems |
| Concurrency testing | Any goroutine code |
| Layered config | Multi-source configuration |
| Cross-platform paths | File/config path resolution |
| Secure debug logging | HTTP client instrumentation |
| Golden test matrices | Rendering / output components |
| Focused linters | CI pipeline setup |
Read references/patterns.md for code examples.
Rules
-
main.go is a stub. Call
cmd.Execute()and nothing else. Gate diagnostics (pprof) behind env vars. -
One bootstrap path. All modes (interactive, headless, test) share the same initialization function. Two paths will drift.
-
Ordered shutdown. Cancel dependents before their dependencies, then run independent cleanup in parallel under a timeout context. WaitGroup the parallel phase.
-
Never block the sender. Non-blocking channel sends with an explicit drop policy. Log drops at debug level. Document the policy.
-
Test concurrency mechanically.
testing/synctestfor deterministic timing,goleak.VerifyNonefor leak detection, dedicated regression tests for timer/channel deadlocks. -
Explicit config precedence. Global → project → flags. Walk up from CWD to discover project configs, reverse so closest wins, deep-merge.
-
Centralize platform paths. One function per concern. Resolution order: env override → XDG → platform default → fallback.
-
Redact secrets in debug logs. Wrap
http.RoundTripper. Filter headers matching authorization, api-key, token, secret. Gate on debug level to skip allocation in prod. -
Golden tests over matrices. Cross dimensions (layout × theme × size) as parallel subtests. Sweep continuous ranges to catch off-by-one bugs.
-
Focused linters, not all linters. Enable what catches real bugs (bodyclose, noctx, tparallel). Disable noisy defaults. Add project-specific checks as scripts. Always
-racein tests.