/') |,\__/|
( ( _| o o|._ go-api-boilerplate
--------)))---)))-----------------------
- Framework for API: Gin
- Package manager: go mod
- DI: Based on service container
- Layers: Controller->Service->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: goose
- Data seeders
- Console commands: Cobra
- Unit tests with overriding of services in DI (
go test
) - Code coverage by tests (
go tool cover
) - Logger integration with Sentry
- Setup alerting for unhandled errors
- Swagger
- Docker compose
- Makefile
- Development: hot reload code
command/
: Console commands.controller/
: Controllers for web requests processing.db/
: Migrations and seeders.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/service/
: Business logic.route/
: Web requests routes.vendor/
: Packages using in application.base.env
: Base environment variables..env
: Environment variables for current environment.
docker-compose up --build
Check
./install/install.sh
cp .env.template .env
mcedit .env
go mod vendor
Create database go-api-boilerplate
.
And run migrations:
make migrate
Check available commands
make
Run http server
make server
Or:
go run main.go server --port=8081
Check http://localhost:8081
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.json:
make swagger
Documentation must be available at url http://localhost:8081/doc/swagger/index.html
- Go 1.23+