This is golang clean architecture template.
- External system perform request (HTTP, gRPC, Messaging, etc)
- The Delivery creates various Model from request data
- The Delivery calls Use Case, and execute it using Model data
- The Use Case create Entity data for the business logic
- The Use Case calls Repository, and execute it using Entity data
- The Repository use Entity data to perform database operation
- The Repository perform database operation to the database
- The Use Case create various Model for Gateway or from Entity data
- The Use Case calls Gateway, and execute it using Model data
- The Gateway using Model data to construct request to external system
- The Gateway perform request to external system (HTTP, gRPC, Messaging, etc)
- Golang : https://github.com/golang/go
- MySQL (Database) : https://github.com/mysql/mysql-server
- Apache Kafka : https://github.com/apache/kafka
- GoFiber (HTTP Framework) : https://github.com/gofiber/fiber
- GORM (ORM) : https://github.com/go-gorm/gorm
- Viper (Configuration) : https://github.com/spf13/viper
- Golang Migrate (Database Migration) : https://github.com/golang-migrate/migrate
- Go Playground Validator (Validation) : https://github.com/go-playground/validator
- Logrus (Logger) : https://github.com/sirupsen/logrus
- Confluent Kafka Golang : https://github.com/confluentinc/confluent-kafka-go
All configuration is in config.json
file.
All API Spec is in api
folder.
All database migration is in db/migrations
folder.
migrate create -ext sql -dir db/migrations create_table_xxx
migrate -database "mysql://root:@tcp(localhost:3306)/golang_clean_architecture?charset=utf8mb4&parseTime=True&loc=Local" -path db/migrations up
go test -v ./test/
go run cmd/web/main.go
go run cmd/worker/main.go