1. Go 项目架构设计
Go 语言项目实战的第一步当然是搭建项目了。首先需要确定的是我们的商城项目采用经典的分层架构,代码布局参考了目前比较通用的标准布局。
1.1 分层架构
分层架构是一种常见的架构模式,也叫 N 层架构,通常 N 至少是两层。需要注意,参考分层架构进行系统设计时,根据不同的划分维度和对象,其实可以得到多种不同的分层架构方案。当前我们划分的对象是商城系统,划分的维度是职责,整个商城系统可以划分为三层。
1)表示层:用户与表示层直接交互,该层接收用户的输入数据并返回(或者显示)系统的响应数据。
2)业务逻辑层:对接收的用户输入数据进行逻辑处理,该层是表示层与数据访问层的桥梁。
3)数据访问层:也可以称之为持久层,主要实现对数据的增、删、改、查等基本操作。数据可以存储在数据库、文件中。
注意:表示层只能访问(调用)业务逻辑层,业务逻辑层只能访问(调用)数据访问层,不能跨层访问。分层架构有优势也有劣势:优势就是两两依赖,降低了系统的复杂度;劣势就是增加了冗余,因为不管业务多么简单,每层都必须参与处理,极端情况下可能每层只是写一个简单的包装函数。 |
1.2 代码布局
其实 Go 语言官方并没有给出 Go 项目代码布局的标准,这里也是参考了 GitHub 上的一个项目(golang-standards/project-layout),该项目定义了一些 Go 项目代码布局的标准,目前也有不少 Go 项目遵循这一标准。该标准定义的代码布局如下:
1)/cmd :本项目的程序入口。一个项目可能包含多个可执行程序,所以 cmd 目录下可能又包含多个子目录,每一个子目录的名称应该与可执行程序名称相同,如 /cmd/mall。注意,这个目录不宜包含太多代码。
2)/internal : 私有代码。如果不希望其他人在项目中导入你的某些代码,可以将这些代码放到这一目录。注意,这是 Go 语言编译器强制执行的。
3) /pkg : 其他项目可以导入的代码。如果你的某些代码其他项目也需要使用,可以考虑将这些代码放到这一目录。
4) /vendor: 本项目的所有依赖项。命令 go mod vendor 将自动创建 /vendor 目录,并将所有的依赖项放到这一目录。注意,如果你不想将依赖项提交到 git 仓库,可以通过在 .gittignore 文件添加到 /vendor 目录实现。
5) /api: OpenAPI/Swagger 规范,协议定义文件等。
6) /configs: 配置文件模板或默认配置文件。
7) /test :放置一些测试程序或测试数据。
8) /docs :项目设计文档,使用文档等。