Go API Service CLAUDE.md
RulesComprehensive agent rules for Go HTTP API services — chi/echo, sqlc, testing, and Docker deployment.
1803/26/2026
Version 1
PublishedInitial version
Created 3/26/2026
Initial version — no previous version to compare
CLAUDE.md
# CLAUDE.md
## Project Context
Go HTTP API service. Router: chi or echo. Database: PostgreSQL with sqlc. Deployment: Docker.
## Code Style
- Follow Effective Go and Go Code Review Comments
- gofmt + goimports on all files
- No init() functions
- Exported types need godoc comments
- Use context.Context as first parameter on all service methods
## Architecture
```
cmd/server/main.go — entry point
internal/
handler/ — HTTP handlers (thin, call services)
service/ — business logic
repository/ — database access (sqlc generated)
middleware/ — HTTP middleware
model/ — domain types
pkg/ — shared utilities (if any)
```
## Error Handling
- Use fmt.Errorf with %w for wrapping
- Custom error types with errors.As/errors.Is
- HTTP handlers return proper status codes
- Never log and return — do one or the other
## Database
- sqlc for type-safe queries (sqlc generate)
- Migrations with golang-migrate
- All queries in internal/repository/queries/
- Connection pooling with pgxpool
## Testing
- Table-driven tests
- testcontainers-go for integration tests
- httptest for handler tests
- go test ./... -race -cover before committing
## Docker
- Multi-stage build (builder + runtime)
- Non-root user in final image
- Health check at /healthz
- Graceful shutdown with signal handling
## Git
- Conventional commits: feat:, fix:, chore:
- Run go vet ./... before pushing