1.9 KiB
Go Backend Template
A simple opinionated Go web app template.
The intention for this project is to work as a template, where the developer should be able to concentrate right away on the business problem and not the usual dev environment and auth wiring. The focus is intentionally on mainly functionality, so the UI is bare-bones.
Features
- Session-based authentication with a sliding expiration
- Argon2 password hashing
- PostgreSQL database
- CORS support
- Request logging middleware
- Native Go HTTP server (no external frameworks)
- HTMX for interactivity
Requirements
-
Go 1.24+
-
PostgreSQL
-
goose for migrations
-
sqlc for generating type-safe queries from SQL
-
air for live reload (optional)
go install github.com/pressly/goose/v3/cmd/goose@latest go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest go install github.com/air-verse/air@latest
Setup
-
Copy environment variables:
cp .env.example .env -
Update
.envwith your database credentials (both theDB_*andGOOSE_*values). -
Install dependencies:
go mod tidy -
Run database migrations:
./scripts/goose.sh up -
Run the server:
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:
./scripts/goose-create.sh add_widgets
SQLC
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/.
Database Schema
user_auth- User accounts with Argon2 password hashesuser_session- User sessions with SHA-256 hashed token secrets