랭킹으로 돌아가기

ThreeDotsLabs/wild-workouts-go-ddd-example

Gothreedots.tech

Go DDD example application. Complete project to show how to apply DDD, Clean Architecture, and CQRS by practical refactoring.

gogolangdddclean-architecturehexagonal-architecturecqrsrefactoringgoogle-cloudserverlessfirebasefirestoreterraform
스타 성장
스타
6.4k
포크
584
주간 성장
이슈
30
6.4k6.4k6.4k6.4k
7월 18일7월 19일7월 20일7월 21일
아티팩트Go Modulesgo get github.com/ThreeDotsLabs/wild-workouts-go-ddd-example
README

Wild Workouts

Wild Workouts is an example Go DDD project that we created to show how to build Go applications that are easy to develop, maintain, and fun to work with, especially in the long term!

The idea for this series, is to apply DDD by refactoring. This process is in progress! Please check articles, to know the current progress.

No application is perfect from the beginning. With over a dozen coming articles, we will uncover what issues you can find in the current implementation. We will also show how to fix these issues and achieve clean implementation by refactoring.

Articles

"Too modern" application

  1. Too modern Go application? Building a serverless application with Google Cloud Run and Firebase [v1.0]
  2. A complete Terraform setup of a serverless application on Google Cloud Run and Firebase [v1.1]
  3. Robust gRPC communication on Google Cloud Run (but not only!) [v1.2]
  4. You should not build your own authentication. Let Firebase do it for you. [v1.3]

Refactoring

  1. Business Applications in Go: Things to know about DRY [v2.0]
  2. When microservices in Go are not enough: introduction to DDD Lite [v2.1]
  3. Repository pattern: painless way to simplify your Go service logic [v2.2]
  4. 4 practical principles of high-quality database integration tests in Go [v2.3]
  5. Introducing Clean Architecture by refactoring a Go project [v2.4]
  6. Introducing basic CQRS by refactoring [v2.5]
  7. Combining DDD, CQRS, and Clean Architecture
  8. Microservices test architecture. Can you sleep well without end-to-end tests? [v2.6]
  9. Repository secure by design: how to sleep better without fear of security vulnerabilities
  10. Running integration tests on Google Cloud Build using docker-compose [v2.7]
  11. More articles are on the way!

Community

We're building a Discord community focused on modern business applications. It's the place to discuss hard topics, request a review, or ask if something's not clear. Come join us!

Directories

  • api OpenAPI and gRPC definitions
  • docker Dockerfiles
  • internal application code
  • scripts deployment and development scripts
  • terraform - infrastructure definition
  • web - frontend JavaScript code

Live Demo

The example application is available at https://threedotslabs-wildworkouts.web.app/.

Running locally

> docker-compose up

# ...

web_1             |  INFO  Starting development server...
web_1             |  DONE  Compiled successfully in 6315ms11:18:26 AM
web_1             |
web_1             |
web_1             |   App running at:
web_1             |   - Local:   http://localhost:8080/
web_1             |
web_1             |   It seems you are running Vue CLI inside a container.
web_1             |   Access the dev server via http://localhost:<your container's external mapped port>/
web_1             |
web_1             |   Note that the development build is not optimized.
web_1             |   To create a production build, run yarn build.

Google Cloud Deployment

> cd terraform/
> make

Fill all required parameters:
	project [current: wild-workouts project]:       # <----- put your Wild Workouts Google Cloud project name here (it will be created) 
	user [current: email@gmail.com]:                # <----- put your Google (Gmail, G-suite etc.) e-mail here
	billing_account [current: My billing account]:  # <----- your billing account name, can be found here https://console.cloud.google.com/billing
	region [current: europe-west1]: 
	firebase_location [current: europe-west]: 

# it may take a couple of minutes...

The setup is almost done!

Now you need to enable Email/Password provider in the Firebase console.
To do this, visit https://console.firebase.google.com/u/0/project/[your-project]/authentication/providers

You can also downgrade the subscription plan to Spark (it's set to Blaze by default).
The Spark plan is completely free and has all features needed for running this project.

Congratulations! Your project should be available at: https://[your-project].web.app

If it's not, check if the build finished successfully: https://console.cloud.google.com/cloud-build/builds?project=[your-project]

If you need help, feel free to contact us at https://threedots.tech

Screenshots

Wild Workouts login Wild Workouts trainer's schedule Wild Workouts schedule training

관련 저장소
avelino/awesome-go

A curated list of awesome Go frameworks, libraries and software

GoGo ModulesMIT Licensegolanggolang-library
awesome-go.com
178.7k13.4k
ollama/ollama

Get up and running with Kimi-K2.6, GLM-5.2, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.

GoGo ModulesMIT Licensellamallm
ollama.com
176.5k17k
golang/go

The Go programming language

GoGo ModulesBSD 3-Clause "New" or "Revised" Licenseprogramming-languagelanguage
go.dev
135.3k19.3k
kubernetes/kubernetes

Production-Grade Container Scheduling and Management

GoGo ModulesApache License 2.0kubernetesgo
kubernetes.io
123.8k43.7k
fatedier/frp

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

GoGo ModulesApache License 2.0proxyreverse-proxy
108.2k15.1k
gohugoio/hugo

The world’s fastest framework for building websites.

GoGo ModulesApache License 2.0gohugo
gohugo.io
89k8.3k
gin-gonic/gin

Gin is a high-performance HTTP web framework written in Go. It provides a Martini-like API but with significantly better performance—up to 40 times faster—thanks to httprouter. Gin is designed for building REST APIs, web applications, and microservices.

GoGo ModulesMIT Licenseservermiddleware
gin-gonic.com
88.9k8.6k
syncthing/syncthing

Open Source Continuous File Synchronization

GoGo ModulesMozilla Public License 2.0synchronizationgo
syncthing.net
86.7k5.4k
junegunn/fzf

:cherry_blossom: A command-line fuzzy finder

GoGo ModulesMIT Licensefzfgo
junegunn.github.io/fzf/
81.9k2.8k
grafana/grafana

The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.

TypeScriptnpmGNU Affero General Public License v3.0grafanamonitoring
grafana.com
75.7k14.3k
caddyserver/caddy

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

GoGo ModulesApache License 2.0goweb-server
caddyserver.com
74.2k4.8k
moby/moby

The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

GoGo ModulesApache License 2.0dockercontainers
mobyproject.org
71.9k19k