📚 Microservice - Awesome Go Library for Web Frameworks

The framework for the creation of microservices, written in Golang
Detailed Description of Microservice
Microservice
The framework for the creation of microservices, written in Golang. This package is implemented using clean architecture principles. A good article on implementing these principles in Golang: http://manuel.kiessling.net/2012/09/28/applying-the-clean-architecture-to-go-applications/
Install
git clone ginhub.com/claygod/microservice
cd microservice
make build
make run
Go to localhost:8080 in your web browser
Version
git clone ginhub.com/claygod/microservice
cd microservice
make build
make version
OR
git clone ginhub.com/claygod/microservice
cd microservice
make build
micro --version
Endpoints
Code in /services/gateways/gatein/gatein.go
/welcome handler/healthz/readyfor SRE/healthzfor kubernetes/readynessfor kubernetes/metricsprometheus metrics/swaggergenerate swagger fo api/public/v1/bar/:keypublic route (example)
[!CAUTION] Requests from an external balancer should be forwarded not to the root of endpoints, but to
/public. Then service routes with metrics and other private information will be inaccessible to external users.
Using
Build and run main.go
Example requests:
- localhost:8080/public/v1/bar/one -> {"Data":"three"}
- localhost:8080/public/v1/bar/secret -> response 404
- localhost:8080/public/v1/bar/looooonnngggoooooggkkkeeyyyyyyy -> response 400 (not valid)
- localhost:8080/healthz/ready -> minute first 5 sec - 503 after 200 (for example!)
- localhost:8080/healthz -> minute first 5 sec - 503 after 200 (for example!)
- localhost:8080/readyness -> response 200
- localhost:8080/swagger -> json-swagger
Swagger
After starting the application, the first time route /swagger is called,
the swagger file config/swagger.yaml is regenerated.
Environment
Add to ENV export GATE_IN_TITLE=Yo-ho-ho! :+1:
ang open in browser http://localhost:8080/ :tada:
Clean architecture
[!IMPORTANT] Distribution of architectural entities by layers
Entity
Path /domain
Usecases
Path /usecases
Interfaces
Path /service
Infrastructure
Path /app , /config and core
Config
The default configuration file:
config/config.yaml
Specify in the command line another file:
yourservice -config other.yaml
Dependencies
github.com/claygod/tools v0.1.2
github.com/dsbasko/go-cfg v1.2.0
github.com/go-playground/validator/v10 v10.22.1
github.com/google/uuid v1.3.0
github.com/julienschmidt/httprouter v1.3.0
github.com/pborman/getopt v1.1.0
github.com/prometheus/client_golang v1.11.1
github.com/savaki/swag v0.0.0-20170722173931-3a75479e44a3
sigs.k8s.io/yaml v1.4.0
github.com/BurntSushi/toml v1.3.2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/caarlos0/env/v10 v10.0.0 // indirect
github.com/cespare/xxhash/v2 v2.1.1 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/golang/protobuf v1.5.0 // indirect
github.com/joho/godotenv v1.5.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.26.0 // indirect
github.com/prometheus/procfs v0.6.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/crypto v0.31.0 // indirect
golang.org/x/net v0.33.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
ToDo
- Use environment variables in configuration
- Add support for metrics
- Input validate
- Swagger 2.0
- "version" command line
- Dockerfile
- docker_build in Makefile
- docker_run in Makefile
- docker_push in Makefile
- Use protocol gRPC
Conclusion
Microservice does not claim the laurels of the only true solution, but on occasion, I hope, will help you create your own micro-architecture of the service, becoming the prototype for future applications.
Give us a star!
[!TIP] If you like or are using this project to learn or start your solution, please give it a star. Thank you!
License
GNU GENERAL PUBLIC LICENSE Version 3
Copyright
Copyright © 2017-2025 Eduard Sesigin. All rights reserved. Contacts: [email protected]