Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dipeshdulal/clean-gin
Implementation of clean architecture in Go, Gin with dependency injection.
https://github.com/dipeshdulal/clean-gin
clean-architecture gin-gonic go golang gorm
Last synced: about 2 months ago
JSON representation
Implementation of clean architecture in Go, Gin with dependency injection.
- Host: GitHub
- URL: https://github.com/dipeshdulal/clean-gin
- Owner: dipeshdulal
- License: 0bsd
- Created: 2020-09-12T12:38:37.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2023-05-24T10:37:46.000Z (over 1 year ago)
- Last Synced: 2024-10-02T05:22:24.519Z (2 months ago)
- Topics: clean-architecture, gin-gonic, go, golang, gorm
- Language: Go
- Homepage:
- Size: 145 KB
- Stars: 436
- Watchers: 11
- Forks: 64
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- go-awesome - clean-gin - Clean architecture project skeleton based on Gin (Open source library / Project Skeleton)
README
## Project Overview
Clean architecture template with gin framework, go-fx as dependency container, gorm as orm for database related operations.To learn about project structure and dependency injection please go through [here](https://medium.com/wesionary-team/dependency-injection-with-go-fx-b698a6585cf0?source=friends_link&sk=26f391ae41c493946ee3434be2ed4971)
Want to ask something, contribute or be part of discussions, 💬 Join us on [Discord](https://discord.gg/mmFdCpKhJx) server.
## Running the project
- Make sure you have docker installed.
- Copy `.env.example` to `.env`
- Run `docker-compose up -d`
- Go to `localhost:5000` to verify if the server works.
- [Adminer](https://www.adminer.org/) Database Management runs at `5001` .If you are running without docker be sure database configuration is provided in `.env` file and run `go run . app:serve`
#### Environment Variables
Variables Defined in the project
| Key | Value | Desc |
| -------------- | ------------------------ | ------------------------------------------- |
| `SERVER_PORT` | `5000` | Port at which app runs |
| `ENV` | `development,production` | App running Environment |
| `LOG_OUTPUT` | `./server.log` | Output Directory to save logs |
| `LOG_LEVEL` | `info` | Level for logging (check lib/logger.go:172) |
| `DB_USER` | `username` | Database Username |
| `DB_PASS` | `password` | Database Password |
| `DB_HOST` | `0.0.0.0` | Database Host |
| `DB_PORT` | `3306` | Database Port |
| `DB_NAME` | `test` | Database Name |
| `JWT_SECRET` | `secret` | JWT Token Secret key |
| `ADMINER_PORT` | `5001` | Adminer DB Port |
| `DEBUG_PORT` | `5002` | Port that delve debugger runs in |#### Migration Commands
> ⚓️ Add argument `p=host` if you want to run the migration runner from the host environment instead of docker environment.
> Check [#19](https://github.com/dipeshdulal/clean-gin/issues/19) for more details. eg; `make p=host migrate-up`Migration commands available
| Command | Desc |
| ------------------- | ---------------------------------------------- |
| `make migrate-up` | runs migration up command |
| `make migrate-down` | runs migration down command |
| `make force` | Set particular version but don't run migration |
| `make goto` | Migrate to particular version |
| `make drop` | Drop everything inside database |
| `make create` | Create new migration file(up & down) |## Implemented Features
- Dependency Injection (go-fx)
- Routing (gin web framework)
- Environment Files
- Logging (file saving on `production`) [zap](https://github.com/uber-go/zap)
- Middlewares (cors)
- Database Setup (mysql)
- Models Setup and Automigrate (gorm)
- Repositories
- Implementing Basic CRUD Operation
- Authentication (JWT)
- Migration Runner Implementation
- Live code refresh
- Dockerize Application with Debugging Support Enabled. Debugger runs at `5002`. Vs code configuration is at `.vscode/launch.json` which will attach debugger to remote application. [Learn More](https://medium.com/wesionary-team/docker-debug-environment-for-go-and-gin-framework-36df80e061ac?source=friends_link&sk=35c9d856852944083dd30059200d87f0)
- Cobra Commander CLI Support. try: `go run . --help`## Todos
- [x] COBRA Commander CLI Support [#26](https://github.com/dipeshdulal/clean-gin/issues/26)
- [ ] Swagger documentation examples [#25](https://github.com/dipeshdulal/clean-gin/issues/25)
- [ ] Unit testing examples. [#23](https://github.com/dipeshdulal/clean-gin/issues/23)
- [ ] File upload middelware. [#20](https://github.com/dipeshdulal/clean-gin/issues/20)
- [x] Use of Interfaces [#10](https://github.com/dipeshdulal/clean-gin/issues/10)## Contributing
Please open issues if you want the template to add some features that is not in todos. 🙇♂️
Create a PR with relevant information if you want to contribute in this template.