📚 gobase - Awesome Go Library for Miscellaneous

Go Gopher mascot for gobase

A simple skeleton for golang application with basic setup for real golang application.

🏷️ Miscellaneous
📂 **Unofficial** set of patterns for structuring projects.
62 stars
View on GitHub 🔗

Detailed Description of gobase

GoBase

License: MIT Go Report Card Go Reference codecov Build Status Mentioned in Awesome Go

This is a simple skeleton for golang application. Inspired by development experience and updated according to github.com/golang-standards/project-layout.

How to use?

  1. Clone the repository (with git client git clone github.com/wajox/gobase [project_name] or use it as template on github for creating a new project)
  2. replace github.com/wajox/gobase with [your_pkg_name] in the all files

Structure

  • /api - OpenAPI specs, documentation generated by swag
  • /cmd - apps
  • /db - database migrations and seeds
  • /docs - documentation
  • /internal - application sources for internal usage
  • /pkg - application sources for external usage(SDK and libraries)
  • /test - some stuff for testing purposes

Commands

# install dev tools(wire, golangci-lint, swag, ginkgo)
make install-tools

# start test environment from docker-compose-test.yml
make start-docker-compose-test

# stop test environment from docker-compose-test.yml
make stop-docker-compose-test

# build application
make build

# run all tests
make test-all

# run go generate
make gen

# generate OpenAPI docs with swag
make swagger

# generate source code from .proto files
make proto

# generate dependencies with wire
make deps

Create new project

With clonegopkg

# install clonegopkg
go install github.com/wajox/clonegopkg@latest

# create your project
clonegopkg clone [email protected]:wajox/gobase.git github.com/wajox/newproject

# push to your git repository
cd ~/go/src/github.com/wajox/newproject
git add .
git commit -m "init project from gobase template"
git remote add origin [email protected]:wajox/newproject.git
git push origin master

Tools and packages

  • gin-gonic
  • ginkgo with gomega
  • spf13/viper
  • spf13/cobra
  • envy
  • zerolog
  • golangci-lint
  • wire
  • swag
  • migrate
  • protoc
  • jsonapi
  • docker with docker-compose