A Go microservice with REST API and PostgreSQL.
.
├── cmd/
│ └── api/ # Application entry point
│ └── main.go
├── internal/
│ ├── config/ # Configuration loading (env vars)
│ ├── database/ # PostgreSQL connection pool
│ ├── handler/ # HTTP handlers (chi router)
│ ├── model/ # Domain models
│ ├── repository/ # Data access layer
│ ├── server/ # HTTP server lifecycle
│ └── service/ # Business logic layer
├── migrations/ # SQL migration files
├── Dockerfile # Multi-stage container build
├── docker-compose.yml # Local dev environment
├── Makefile # Build & dev commands
└── .env.example # Environment variable template
- Go 1.23+
- PostgreSQL 16+
- golang-migrate (for migrations)
# Copy env template
cp .env.example .env
# Start PostgreSQL via Docker
docker compose up postgres -d
# Run migrations
make migrate-up DB_DSN="postgres://postgres:postgres@localhost:5432/selfshares?sslmode=disable"
# Run the API
make runmake docker-up # start all services
make docker-down # stop all servicesmake build # Build binary
make run # Run locally
make test # Run tests
make lint # Run golangci-lint
make migrate-up # Apply migrations
make migrate-down # Rollback migrations
make docker-up # Docker Compose up
make docker-down # Docker Compose down