go-api-boilerplate
go-api-boilerplate copied to clipboard
Boilerplate for Golang API
Go API Boilerplate
Features
- [x] Framework for API: Gin
- [x] Package manager: go mod
- [x] DI: Based on service container
- [x] Layers: Controller->Service->Repository->Entity
- [x] Routes: Gin
- [x] Process controller results and convert them into JSON/XML according to request headers
- [x] Logger: logrus
- [x] Environment variables, config: Viper
- [x] ORM: GORM
- [x] Migrations: gorm-goose
- [x] Base CRUD service
- [x] Base CRUD repository
- [x] Base CRUD controller
- [x] Request validation (Gin)
- [x] Console commands: Cobra
- [x] Unit tests with overriding of services in DI (
go test
) - [x] Code coverage by tests (
go tool cover
) - [x] Logger integration with Sentry: logrus_sentry
- [x] Setup alerting for unhandled errors
- [x] Swagger
- [x] Docker compose
Folders structure
-
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.
How to use (Docker)
docker-compose up --build
Check http://localhost:8080
How to use (without Docker)
Prepare environment for Go projects if you do not done it early
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/profile
And add last line:
export PATH=$PATH:/usr/local/go/bin
Update environment variables:
source /etc/profile
Check Go version:
go version
Now create folder for Go projects:
mkdir ~/go
cd ~/go
touch init.sh
mcedit init.sh
Paste next code into this file:
#!/bin/bash
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
Execute file:
chmod +x init.sh
source init.sh
Clone repo
git clone [email protected]:zubroide/go-api-boilerplate.git
cd go-api-boilerplate
Install necessary packages
./install/install.sh
Create and edit config
cp .env.example .env
mcedit .env
Download vendor packages
go mod download
Run migrations
Create database go-api-boilerplate
.
And run migrations:
make migrate
Run application
make server
Or:
go run main.go server --port=8080
Check http://localhost:8080
Run tests
Run all tests:
go test ./... -v -coverpkg=./... -coverprofile=coverage.out
go tool cover -html=coverage.out
Run test for one package:
go test go-api-boilerplate/test/unit -v -coverpkg=./... -coverprofile=coverage.out
Run one test:
go test test/unit/user_service_test.go -v -coverpkg=./... -coverprofile=coverage.out
Using make:
make test
Generate Swagger documentation
Generate swagger.json:
make swagger
Documentation must be available at url http://localhost:8080/swagger/index.html
Requirements
- Go 1.12+