2.1 KiB
Coding Standards
Architecture Pattern
Application uses:
- Handler Layer
- Service Layer
- Repository Layer
Pattern.
Layer Responsibilities
Handler Layer
Responsibilities:
- Receive HTTP Request
- Validate Input
- Call Service Layer
- Render Templates
- Return Response
Must NOT:
- Execute SQL
- Contain Business Logic
Service Layer
Responsibilities:
- Business Logic
- Validation
- Workflow Processing
Must NOT:
- Handle HTTP Context Directly
- Execute Raw SQL
Repository Layer
Responsibilities:
- Database Access
- CRUD Operations
- Query Handling
Must NOT:
- Handle HTTP Requests
- Render Templates
- Contain Business Logic
Dependency Injection
Dependencies must be injected.
Avoid global variables.
Use constructor-based dependency injection.
Configuration
All configuration must come from Environment Variables.
Examples:
DB_HOST
DB_PORT
DB_NAME
DB_USER
DB_PASSWORD
REDIS_HOST
REDIS_PORT
REDIS_PASSWORD
SESSION_SECRET
APP_ENV
APP_PORT
Logging
Use structured logging.
Levels:
- INFO
- WARN
- ERROR
Never use fmt.Println for production logging.
Error Handling
Never expose internal errors to users.
Log internal errors.
Return user-friendly messages.
Create centralized error handling.
Security
Use:
- CSRF Protection
- Secure Cookies
- HTTP Only Cookies
- SameSite Cookies
Passwords:
- bcrypt
Never store plaintext passwords.
Templates
Use Go HTML Templates.
Use layout pattern.
Keep business logic outside templates.
Templates should only render data.
Database
Use:
- GORM
- Migrations
- Soft Delete
Avoid raw SQL unless absolutely necessary.
Redis
Use Redis for:
- Session Storage
- Rate Limiting
- Future Cache Layer
File Upload
Never store uploads inside source code repository.
Production upload path:
/opt/data/uploads
Structure:
uploads/ ├── posts ├── projects ├── profile └── settings
Store only relative file paths in database.
Testing
Future implementation:
- Unit Test
- Service Test
- Repository Test
Target business logic coverage first.