go-microservice-template
main purpose is to be a starting point
for a REST API in Go. Reducing boilerplate writing and speeding up development of new microservices.
- Clone repository.
- Delete
LICENSE
and.git
. - Rename module name on
go.mod
. - Rename the module reference of local packages inside
server/
andmain.go
with the new module name. Example:
import (
// rename with you module name
"github.com/bruno-chavez/go-microservice-template/handlers"
"github.com/julienschmidt/httprouter"
"net/http"
"os"
"time"
)
- Rename the
.env.example
file to.env
and customize the parameters accordingly.
- Fast and easy to use router with julienschmidt/httprouter.
- Ready to use
Dockerfile
for building a secure and small Docker Image. - Graceful shutdown out of the box.
- Environment variables loading from an
.env
file with the help of godotenv. - Dependency management with Go Modules.
- Optional CORS handling with rs/cors, see
server/server.go
for how to enable it.
go-microservice-template
currently uses GitHub Actions for running a CI pipeline containing linting, testing and building the binary and Docker image. Current workflow:
- Lints with golangci-lint.
- Run unit tests and prints the results with tparse.
- Builds binary.
- Builds Docker Image.
See ci.yml for more info.
- Previously the module was called
go-web-template
, it lacked any kind of meaningful updates and was too opinionated for its purpose. I decided to complete refactor it and came up with the current iteration ofgo-microservice-template
.
Found a bug or an error? Post it in the issue tracker.
Want to add an awesome new feature? Fork this repository, add the feature on a new branch, send a pull request!
The MIT License (MIT) Copyright (c) 2021 Bruno Chavez