Clean Architecture with GO
Introducing Clean architecture with Go.
--
Clean Architecture is designed to separate concerns by organizing code into several layers with a very explicit rule which enables us to create a testable and maintainable project. In this article, I’m going to walk you through how Clean Architecture works in Go.
Example repo
You can view the full codebase at:
Updated:
- Added transactions support
- Fixed duplicated repository
- Updated codebase structure
Pre-requisites
The target of readers in this post is who:
- Knows the basic idea of Clean Architecture
- Wants to implement Go with Clean Architecture
So if you are not familiar with Clean Architecture, you can read some recommended articles to catch up.
- The Clean Code Blog
- Clean Architecture: Part 2 — The Clean Architecture
- Better Software Design with Clean Architecture
The darkness of software design
If you’ve been working as a programmer, you’ve probably run into the code that:
- Is painful to add new features
- Is too difficult to debug
- Is hard or impossible to test without dependencies like a web server or database
- Get a view and business logic mixed in widely, even can’t be separated
- Is hard to understand what its purpose for
- Has a lot of jobs only in one function and is too long.
Even applications structured with MVC may leak business logic to the controller, or the domain model may be used throughout the project. When this happens, it may even be frustrating to commit because you don’t know how much it affects other functions.