Go Architecture
Opinionated, 2026-current guidance for structuring Go backend services. Favors the standard library and small, composable libraries over heavy frameworks.
Use when:
- Laying out a new Go module or service (directory structure,
cmd/,internal/) - Choosing an HTTP router (stdlib
net/httpServeMux, chi, echo/gin/fiber) - Choosing a database layer (sqlc + pgx, GORM) or wiring queries
- Wiring dependencies (constructors, DI without a framework)
- Reviewing an existing Go service for structural / architectural issues
Do NOT use for:
- Writing tests, benchmarks, fuzzing, coverage — use
go-testing-quality - SOLID line-limit / interface-placement enforcement — use
fuse-solid:solid-go - Non-Go backends (Laravel, Next.js, Rust) — use the matching expert
- Frontend / UI work — use
fuse-designor a framework expert
Decision Map
| Question | Load | |----------|------| | Where do files/packages go? | project-layout.md | | Which HTTP router? How do I route? | http-routing.md | | How do I talk to the database? | database-access.md | | How do I wire dependencies? | dependency-injection.md | | I need a full working example | templates/rest-service.md |
Core Principles (2026)
- Standard library first. Since Go 1.22 the
net/http.ServeMuxsupports method matching and path wildcards (GET /posts/{id},req.PathValue("id")). Most services no longer need a routing framework. Source: https://go.dev/blog/routing-enhancements internal/is the default home for service logic. A server binary is self-contained; keep packages underinternal/and binaries undercmd/. There is no officialpkg/requirement — do not cargo-cult it. Source: https://go.dev/doc/modules/layout- Constructor injection, no DI framework by default. Pass dependencies as
interface parameters to
New…constructors; wire them inmain. - Type-safe SQL is the 2026 default.
sqlcgenerates idiomatic Go from raw SQL; run it on top of thepgxdriver for PostgreSQL. GORM still works but is in relative decline for new services — see database-access.md for the nuance. Sources: https://docs.sqlc.dev + https://pkg.go.dev/github.com/jackc/pgx/v5
Workflow
- Explore the existing tree first (do not assume layout).
- Load the relevant reference from the Decision Map above.
- Cross-check the version-sensitive claims (router, sqlc/pgx) against the source URLs before writing code — APIs move.
- Scaffold from templates/rest-service.md when starting fresh.
- Keep files small and interfaces separated (defer to
fuse-solid:solid-go). - Validate with
go-testing-quality+ sniper after any code change.
Boundaries (cross-referenced, not copied)
The community skill set at github.com/samber/cc-skills-golang covers overlapping
Go territory. This skill deliberately scopes to architecture / structure /
routing / DB wiring and hands testing off to go-testing-quality. When in
doubt about which skill owns a topic, prefer the more specific one.