2 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
-
Run setup (copies
.env.exampleto.env, runsgo mod tidy, enables the repo's git hooks which reject commits with unformatted Go files):make setup -
Update
.envwith your database credentials (both theDB_*andGOOSE_*values). -
Run database migrations:
make migrate-up -
Run the server:
make dev # live reload, or: make run
Migrations
make migrate-up / make migrate-down / make migrate-status load .env and
pass through to goose. Create a new migration with:
make migrate-create name=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
make 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