Skip to content

zubroide/go-api-boilerplate

Repository files navigation

Go API Boilerplate

  /')   |,\__/|
 ( (   _|  o o|._   go-api-boilerplate
--------)))---)))-----------------------

Features

  • 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

Folders structure

  • 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.

How to use (Docker)

docker-compose up --build

Check

How to use (without Docker)

Install necessary packages

./install/install.sh

Create and edit config

cp .env.template .env
mcedit .env

Get vendor packages

go mod vendor

Run migrations

Create database go-api-boilerplate.

And run migrations:

make migrate

Run application

Check available commands

make

Run http server

make server

Or:

go run main.go server --port=8081

Check http://localhost:8081

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:8081/doc/swagger/index.html

Requirements

  • Go 1.23+