60 lines
2.7 KiB
Markdown
60 lines
2.7 KiB
Markdown
---
|
|
trigger: model_decision
|
|
description: When working on a Go backend project, setting up Go project structure, or organizing Go services and APIs
|
|
---
|
|
|
|
## Go Backend Layout
|
|
|
|
Use this structure for Go backend applications. The vertical slice principle applies — features are packages, not layers.
|
|
|
|
```
|
|
apps/
|
|
backend/ # Backend application source code
|
|
cmd/
|
|
api/
|
|
main.go # Entry point: Wires dependencies, router, starts server
|
|
internal/ # Private application code
|
|
platform/ # Foundational technical concerns (The "Framework")
|
|
database/ # DB connection logic
|
|
server/ # HTTP server setup (Router, Middleware)
|
|
logger/ # Structured logging setup
|
|
features/ # Business Features (Vertical Slices)
|
|
task/ # Task management
|
|
# --- Interface Definition ---
|
|
service.go # The public API of this feature (Service struct)
|
|
|
|
# --- Delivery (HTTP) ---
|
|
handler.go # HTTP Handlers
|
|
handler_test.go # Component tests (httptest + mock service)
|
|
|
|
# --- Domain (Business Logic) ---
|
|
logic.go # Core business logic methods
|
|
logic_test.go # Unit tests (Pure functions + mock storage)
|
|
models.go # Domain structs (Task, NewTaskRequest)
|
|
errors.go # Feature-specific errors
|
|
|
|
# --- Storage (Data Access) ---
|
|
storage.go # Storage Interface definition
|
|
storage_pg.go # Postgres implementation
|
|
postgres_integration_test.go # Integration tests (Real DB/Testcontainers)
|
|
storage_mock.go # Mock implementation
|
|
...
|
|
order/ # Order management
|
|
handler.go
|
|
logic.go
|
|
storage.go
|
|
...
|
|
```
|
|
|
|
**Key Go conventions:**
|
|
- `cmd/` for entry points — each subdirectory is a separate binary
|
|
- `internal/` for private packages — enforced by Go compiler (cannot be imported externally)
|
|
- `platform/` for foundational concerns (database, server, logger)
|
|
- `features/` for vertical business slices — each feature is self-contained
|
|
- Tests live alongside the code they test (`_test.go` suffix)
|
|
- `go.mod` at the root — single module for the entire application
|
|
|
|
### Related Principles
|
|
- Project Structure @project-structure.md (core philosophy)
|
|
- Go Idioms and Patterns @go-idioms-and-patterns.md (coding idioms, error handling, naming)
|