# Go Backend Template A simple Go backend with authentication using native `net/http` and PostgreSQL. ## Features - Session-based authentication - Argon2 password hashing - PostgreSQL database - CORS support - Request logging middleware - Native Go HTTP server (no external frameworks) ## Requirements - Go 1.24+ - PostgreSQL - [goose](https://github.com/pressly/goose) for migrations, [air](https://github.com/air-verse/air) for live reload (optional): ```bash go install github.com/pressly/goose/v3/cmd/goose@latest go install github.com/air-verse/air@latest ``` ## Setup 1. Copy environment variables: ```bash cp .env.example .env ``` 2. Update `.env` with your database credentials (both the `DB_*` and `GOOSE_*` values). 3. Install dependencies: ```bash go mod tidy ``` 4. Run database migrations: ```bash ./scripts/goose.sh up ``` 5. Run the server: ```bash air # live reload, or: go run ./cmd ``` ## Migrations `goose.sh` loads `.env` and passes through to goose (`up`, `down`, `status`, ...). Create a new migration with: ```bash ./scripts/goose-create.sh add_widgets ``` ## SQLC (optional) Query codegen is configured in `sqlc.yaml` (engine `postgresql`, schema read from `migrations/`). Add `.sql` files under `internal/database/queries/` and run `sqlc generate` to emit typed accessors into `internal/database/sqlc/`. ## API Endpoints - `POST /login` - User login - `GET /user` - Get user info (requires session cookie) ## Database Schema - `user_auth` - User accounts with Argon2 password hashes - `user_session` - User sessions with SHA-256 hashed token secrets