Go项目两种结构

go 项目的目录结构没有一个官方的标准,但是有一些社区推荐的实践和约定。一般来说,go 项目的目录结构可以分为两种类型:

结构化目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
├── build                   # 打包和持续集成
│   ├── docker              # Docker 镜像
│   ├── package             # 打包脚本
│   └── release             # 发布脚本
├── cmd                     # 主应用
│   └── myapp               # 应用入口
│       └── main.go         # main 函数
├── configs                 # 配置文件
│   └── config.yaml         # 配置文件模板或默认值
├── docs                    # 文档
├── init                    # 系统初始化(systemd, upstart, sysv)
│   └── myapp.service       # systemd 服务文件
├── internal                # 私有应用代码库
│   ├── app                 # 应用层
│   │   └── handler         # 处理器层
│   ├── biz                 # 业务逻辑层
│   ├── data                # 数据访问层
│   ├── pkg                 # 公共库代码
│   └── service             # 服务层
├── scripts                 # 脚本
│   ├── coverage.sh         # 测试覆盖率脚本
│   ├── lint.sh             # 代码质量检查脚本
│   └── test.sh             # 测试脚本
├── test                    # 测试数据或文件
├── third_party             # 第三方依赖(如 swagger ui)
├── Makefile                # Makefile 文件
├── go.mod                  # go mod 文件
└── README.md               # README 文件

平铺式目录

1
2
3
4
5
6
├── example                 # 示例代码
│   └── main.go             # 示例入口
├── foo.go                  # foo 包代码
├── bar.go                  # bar 包代码
├── go.mod                  # go mod 文件
└── README.md               # README 文件