包含多个系统的单应用目录结构会不太一样,主要由于不同的系统有不同的功能逻辑,也有相同的功能逻辑。我们需要将不同的功能逻辑充分地进行解耦,互不干扰;而相同的功能抽离出来,便于复用。还是高内聚,低耦合**。
├── app
│ ├── common
│ ├── dao
│ ├── model
│ └── module
│ └── user
│ └── api
│ ├── cli
│ ├── cron
│ ├── define
│ └── service
│ └── init.go
│ └── init.go
├── boot
├── config
├── docker
├── document
├── i18n
├── library
├── packed
├── public
├── template
├── upload
├── Dockerfile
├── go.mod
└── main.go
目录/文件名 | 说明 | 描述 |
---|---|---|
app | 业务逻辑层 | 所有的业务逻辑存放目录。 |
─ common | 通用逻辑 | 多系统间可复用的、通用的功能逻辑。 |
─ dao | 数据访问 | 数据库的访问操作,仅包含最基础的数据库CURD方法。 |
─ model | 结构模型 | 数据相关的实体结构定义,以及一些系统间通用的数据结构定义。 |
─ module | 系统模块 | 内部可能包含多个子系统,不同子系统之间资源相互隔离。 |
── user | 用户系统模块 | 子系统模块。 |
─── api | 业务接口 | 当前系统内部接收/解析用户输入参数的入口/接口层。 |
─── cli | 命令行接口 | 当前系统命令行方式执行的入口/接口层。 |
─── cron | 定时任务 | 当前系统内部定时任务执行入口层。 |
─── define | 结构定义 | 当前系统内部的输入、输出、错误码等数据结构定义。 |
─── service | 逻辑封装 | 当前系统内部业务逻辑封装,实现特定的业务需求。 |
─── init.go | 模块初始化 | 用于模块业务参数或者路由的初始化,在app/init.go中被import的包。 |
─ init.go | 项目初始化 | 用于项目公用业务参数或者路由的初始化,main.go中最后一个被import的包。 |
boot | 初始化包 | 用于系统初始化参数设置,往往作为main.go中第一个被import的包。 |
config | 配置管理 | 所有的配置文件存放目录。 |
docker | 镜像文件 | Docker镜像相关依赖文件,脚本文件等等。 |
document | 项目文档 | Documentation项目文档,如: 设计文档、帮助文档等等。 |
i18n | I18N国际化 | I18N国际化配置文件目录。 |
library | 公共库包 | 公共的功能封装包,往往不包含业务需求实现。 |
packed | 打包目录 | 资源文件打包的Go文件存放在这里,boot包初始化时自动调用。 |
public | 静态目录 | 仅有该目录下的文件才能对外提供静态服务访问。 |
template | 模板文件 | 模板文件存放的目录。仅当需要使用模板引擎的场景下有用。 |
Dockerfile | 镜像描述 | 云原生时代用于编译生成Docker镜像的描述文件。 |
go.mod | 依赖管理 | 使用Go Module包管理的依赖描述文件。 |
main.go | 入口文件 | 程序入口文件。 |