- Framework for API: Gin
- Package manager: go mod
- DI: Based on service container
- Layers: Controller->Service->Repository->Entity
- Routes: Gin
- Process controller results and convert them into JSON/XML according to request headers
- Logger: logrus
- Environment variables, config: Viper
- ORM: GORM
- Migrations: gorm-goose
- Base CRUD service
- Base CRUD repository
- Base CRUD controller
- Request validation (Gin)
- Console commands: Cobra
- Unit tests with overriding of services in DI (
go test) - Code coverage by tests (
go tool cover) - Logger integration with Sentry: logrus_sentry
- Setup alerting for unhandled errors
- Swagger
- Docker compose
command/: Console commands.controller/: Controllers for web requests processing.db/: Migrations.dic/: Dependency Injection Container.doc/: Swagger documentation.docker/: Docker containers description.install/: Scripts for environment preparing.logger/: Logger and client for Sentry.model/: Business logic.model/db/: DB connection.model/entity/: GORM entities.model/repository/: Repositories for access to storage.model/service/: Business logic.route/: Web requests routes.test/: Unit tests.vendor/: Packages used in application..env: Environment variables for current environment.base.env: Base environment variables.
docker-compose up --buildCheck http://localhost:8080
sudo apt update
sudo apt upgrade
# See last version here: https://golang.org/dl/
wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz
sudo tar -xvf go1.12.5.linux-amd64.tar.gz
sudo mv go /usr/local
sudo mcedit /etc/profileAnd add last line:
export PATH=$PATH:/usr/local/go/binUpdate environment variables:
source /etc/profileCheck Go version:
go versionNow create folder for Go projects:
mkdir ~/go
cd ~/go
touch init.sh
mcedit init.shPaste next code into this file:
#!/bin/bash
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/binExecute file:
chmod +x init.sh
source init.shgit clone [email protected]:zubroide/go-api-boilerplate.git
cd go-api-boilerplate./install/install.shcp .env.example .env
mcedit .envgo mod downloadCreate database go-api-boilerplate.
And run migrations:
make migratemake serverOr:
go run main.go server --port=8080Check http://localhost:8080
Run all tests:
go test ./... -v -coverpkg=./... -coverprofile=coverage.out
go tool cover -html=coverage.outRun test for one package:
go test go-api-boilerplate/test/unit -v -coverpkg=./... -coverprofile=coverage.outRun one test:
go test test/unit/user_service_test.go -v -coverpkg=./... -coverprofile=coverage.outUsing make:
make testGenerate swagger.json:
make swaggerDocumentation must be available at url http://localhost:8080/swagger/index.html
- Go 1.12+