DDD Go by B.Balev

A meticulously crafted DDD modular monolith template, embodying principles of clean architecture and separation of concerns. This structure promotes high cohesion within modules and loose coupling between them, facilitating ease of maintenance, scalability, and potential future microservices transition.
golang-ddd/
├── cmd/
│   └── api/
│       └── main.go                 # Entry point of the application
├── internal/
│   ├── domain/
│   │   ├── user/
│   │   │   ├── entity.go           # User entity definition
│   │   │   ├── repository.go       # User repository interface
│   │   │   └── service.go          # User domain service
│   │   ├── product/
│   │   │   ├── entity.go           # Product entity definition
│   │   │   ├── repository.go       # Product repository interface
│   │   │   └── service.go          # Product domain service
│   │   └── order/
│   │       ├── entity.go           # Order entity definition
│   │       ├── repository.go       # Order repository interface
│   │       └── service.go          # Order domain service
│   ├── application/
│   │   ├── user/
│   │   │   ├── commands/
│   │   │   │   ├── create_user.go  # Create user use case
│   │   │   │   └── update_user.go  # Update user use case
│   │   │   └── queries/
│   │   │       ├── get_user.go     # Get user use case
│   │   │       └── list_users.go   # List users use case
│   │   ├── product/
│   │   │   ├── commands/
│   │   │   │   ├── create_product.go
│   │   │   │   └── update_product.go
│   │   │   └── queries/
│   │   │       ├── get_product.go
│   │   │       └── list_products.go
│   │   └── order/
│   │       ├── commands/
│   │       │   ├── create_order.go
│   │       │   └── update_order.go
│   │       └── queries/
│   │           ├── get_order.go
│   │           └── list_orders.go
│   ├── infrastructure/
│   │   ├── persistence/
│   │   │   ├── postgres/
│   │   │   │   ├── user_repository.go    # PostgreSQL implementation of user repository
│   │   │   │   ├── product_repository.go
│   │   │   │   └── order_repository.go
│   │   │   └── redis/
│   │   │       └── cache.go              # Redis caching implementation
│   │   ├── auth/
│   │   │   └── jwt.go                    # JWT authentication implementation
│   │   ├── kafka/
│   │   │   ├── producer.go               # Kafka producer implementation
│   │   │   └── consumer.go               # Kafka consumer implementation
│   │   └── telemetry/
│   │       ├── tracing.go                # Distributed tracing setup
│   │       └── metrics.go                # Metrics collection setup
│   └── interfaces/
│       ├── http/
│       │   ├── handlers/
│       │   │   ├── user_handler.go       # HTTP handlers for user-related endpoints
│       │   │   ├── product_handler.go
│       │   │   └── order_handler.go
│       │   ├── middleware/
│       │   │   ├── auth_middleware.go    # Authentication middleware
│       │   │   └── logging_middleware.go # Logging middleware
│       │   └── routes.go                 # HTTP route definitions
│       └── grpc/
│           ├── proto/
│           │   └── user.proto            # Protocol buffer definitions for user service
│           └── services/
│               └── user_service.go       # gRPC service implementation for user service
├── pkg/
│   ├── logger/
│   │   └── logger.go                     # Logging utility
│   ├── errors/
│   │   └── errors.go                     # Custom error definitions
│   └── validator/
│       └── validator.go                  # Input validation utility
├── config/
│   ├── config.go                         # Configuration loading logic
│   └── config.yaml                       # Configuration file
├── migrations/
│   ├── 000001_create_users_table.up.sql
│   ├── 000001_create_users_table.down.sql
│   ├── 000002_create_products_table.up.sql
│   ├── 000002_create_products_table.down.sql
│   ├── 000003_create_orders_table.up.sql
│   └── 000003_create_orders_table.down.sql
├── scripts/
│   └── seed/
│       └── seed.go                       # Database seeding script
├── tests/
│   ├── integration/
│   │   └── api_test.go                   # Integration tests for API
│   └── unit/
│       ├── domain_test.go                # Unit tests for domain logic
│       └── application_test.go           # Unit tests for application services
├── api/
│   └── openapi/
│       └── api.yaml                      # OpenAPI/Swagger specification
├── deployments/
│   ├── dockerfile                        # Dockerfile for containerization
│   ├── docker-compose.yml                # Docker Compose file for local development
│   └── k8s/
│       ├── deployment.yaml               # Kubernetes deployment configuration
│       └── service.yaml                  # Kubernetes service configuration
├── go.mod                                # Go module file
├── go.sum                                # Go module checksum file
├── Makefile                              # Makefile for common development tasks
├── .gitignore                            # Git ignore file
├── .golangci.yml                         # golangci-lint configuration
└── README.md                             # Project documentation