基于Clean Architecture的Go项目架构实践
经过这些年的发展,Go 语言已经成为一门被广泛使用在各个领域的编程语言。从 k8s、docker 等基础组件,到业务领域的微服务,都可以用 Go 构建。在构建这些 Go 项目时,采用哪种架构模式和代码布局,是一个仁者见仁智者见智的事情。有 Java Spring 经验的可能会采用 MVC 模式,有 Python Flask 经验的可能会采用 MTV 模式。加上 Go 语言领域并没有出现主流的企业级开发框架,很多项目甚至没有明确的架构模式。 Clean Architecture Clean Architecture 是 Uncle Bob 提出的适用于复杂业务系统的架构模式,其核心思想是将业务复杂度与技术复杂度解藕,相比于 MVC、MTV 等模式,Clean Architecture 除了进行分层,还通过约定依赖原则,明确了与外部依赖的交互方式,以及外部依赖与业务逻辑的边界。感兴趣的朋友可以直接阅读作者原文https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html。 由于 Clean Architecture 具有脱离语言和框架的灵活性,作者在提出时也没有规定实现细节,给 Clean Architecture 的落地带来了困难,接下来以一个例子来说明如何在 Go 项目中应用 Clean Architecture 的思想。 布局 作为一个 Go 项目,不管用哪种架构模式,建议都建立 app 和 scripts 这两个路径。app 存放启动 Go 项目的入口文件,通常是 main.go。而 scripts 可以放一些构建和部署时候用到的脚本。 clean_architecture_demo ├── README.md ├── app │ └── main.go ├── scripts │ ├── build.sh │ └── run.sh ├── go.mod ├── go.sum └── usecases 接下来是代码部分,分为 entities、usecases、adapters 三个部分。 ...