GoArcc – Go monolith with embedded microservices including GRPC,REST, graphQL and The Clean Architecture.

Description

When you start writing a Go project, GoArcc helps to set up all the initial code boilerplate for your project. Initial boilerplate code means how you should organize your codebase and how you can write multiple services. We have support for REST, Graphql as well as gRPC.

We have implemented logging, tracing, health check, Jaeger, etc so that any developer will come and write services within a minute.

In short, GoArcc is a boilerplate setup codebase for any monolithic(Architecture) based web/mobile applications which later converted into microservices(Architecture).

Read more about GoArcc

Structure of Go packages

  • client/* – clients for server dialing
    • grpcClient – grpcClient dials grpc server
  • cmd/* – main application(s)
  • config – application related configs
  • db – postgres DB connection and adapters
  • logger – global zap logger
  • modules/* – embedded microservices, with structure:
    • external-svc – exposed apis logic implementation
    • internal-svc – unexposed apis logic implementation
    • models – database models, operations using gorm
    • pb – autogenerated files from .proto file
  • protos – External required protos for internal protos
    • types – application related common proto types
  • servers – all running servers
    • graphql – ms graphql registration and server invoke
    • grpc – ms grpc registration and server invoke
    • rest – ms rest registration and server invoke

Features

  • Project structure (mostly) follows Standard Go Project Layout.
  • Easily testable code (thanks to The Clean Architecture).
  • Graceful shutdown support.
  • Example gRPC API:
  • Example graphQL API:
  • Example REST API:
  • Example tests, both unit and integration.
  • Production logging using zap.
  • Production metrics using Prometheus.
  • Docker and docker-compose support.
  • Smart test coverage report
  • CI/CD setup for GitHub Actions.

Development

Requirements

Build from source

  1. Clone the repo:

git clone [email protected]:deqode/GoArcc.git
  1. After cloning the repo, review config.yml and update for your system as needed
  2. Build to create GoArcc binary

make build

Run

Jaeger UI:

http://localhost:16686

Health Trace:

http://localhost:8083/health/

Prometheus UI:

http://localhost:9090

Prometheus UI Metrics:

http://localhost:9090/metrics

Grpc Server:

http://localhost:8080

Graphql Server:

http://localhost:8081

Rest Server:

http://localhost:8082

License

Copyright 2021, DeqodeLabs (https://deqode.com/)

Licensed under the MIT License(the "License");

GitHub

https://github.com/deqode/GoArcc