This starter kit is designed to get you up and running with a project structure optimized for developing RESTful API services in Go. It is an opinionated Go starter kit built on top of Chi, using battle tested libraries proven to provide a good foundation for a project written in Golang.
The codebase requires these development tools:
- Go compiler and runtime: 1.15.2 or greater.
- Docker Engine: 19.0.0 or greater.
The project uses Go modules which should be vendored:
env GO111MODULE=on GOPRIVATE="github.com" go mod vendor
You may configure GoStarter using either a configuration file named .env, environment variables, or a combination of both. Environment variables are prefixed with GoStarter, and will always have precedence over values provided via file.
SERVER_ADDRESS: localhost
SERVER_PORT: 8080
ADDRESS
- string
Hostname to listen on.
PORT
- number
Port number to listen on. Defaults to 8080
.
DB_DRIVER: postgres
DB_HOST: dbhost
DB_USER: dbuser
DB_PASSWORD: dbpassword
DB_NAME: dbname
UUID Type: This project uses the uuid-ossp
module to generate ids:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Migrations Note Migrations are not applied automatically, so you will need to run them after you've built GoStarter.
- If built locally:
./go-starter migrate
- Using Docker:
docker run --rm go-starter ./go-starter migrate
The recommended workflow is to use Docker and the compose file to build and run the service and resources.
docker compose -f d8t/docker-compose.dev.yml up --build
docker exec -it go-starter-db psql -U gostarter -d gostarter
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
docker exec -it go-starter go run main.go migrate
Hot Reloading: GoStarter uses Reflex in development for hot reloading.
make image
now run the image with (make sure you've run the migrations first)
docker run -it go-starter
Running the tests locally requires a valid database connection. Configure config.test.yaml
with the appropriate values.
make test-prepare
make test