GOBERRY - Economist vanilla microservice template.
- Clone this repository into your GOPATH.
godep restoreto get the minimal dependencies.
- Drop the .git folder.
- Design your RAML API interface.
raml-genwhich will generate HTTP handlers for your service.
- Copy the generated
go installto build the binary, run it in the app root.
- The ramlapi package will wire up your endpoints to the handlers.
- Now build out your service.
We are aiming to make our microservices 12 factor
- Create a .env file for environment variables and drop into the project root. The godotenv package will then parse this file and set environment variables for everything contained in this file.
The Makefile provides the following:
gomkbuild: build the application binary.
gomkinstall: install the application binary.
buildstamp: build the appication binary, and when the binary is run with the --version flag, log build date and build commit hash (default stdout).
installstamp: install the appication binary, and when the binary is run with the --version flag, log build date and build commit hash (default stdout).
gomkxbuild: build all cross-platform binaries, using
gomkclean: clean the project directory.
go tool veton each source file.
golinton each source file.
go fmton the entire project.
go testfor all packages in the project.
go testwith race detection in all packages in the project.
cover: run tests with coverage report in all pkgs in the project.
printvars: print all variables defined in the Makefile.
To build the service and drop build date information, build as follows:
go build -ldflags "-X main.buildstamp `date -u '+%Y-%m-%d_%I:%M:%S%p'` -X main.githash `git rev-parse HEAD`"
Then run --version=yes
We use gobundle to bundle assets (for now, just api.raml) with the binary. To bundle an updated RAML file:
- Make sure BUNDLE_ASSETS=1 is included in your
go get github.com/alecthomas/gobundle/gobundle
gobundle --compress --uncompress_on_init --package=main --target=bundle.go "api.raml"
By default this is off in goberry so you can adapt your RAML file as necessary when you create a new service and then bundle it up.
make test for boring old black and white test output.
pride to get nicely colorized test output.
The goconsul.json file is present to hook up to a package being built to plug into consul
This codebase provides low level metrics using the built-in expvar package. Simply navigate to /debug/vars to see basic memory allocation and stack use information.