项目目录
/vendor 目录
- 其中包含所有依赖的第三方源代码
- 当既有mod又有vendor的时候,可用命令
go mod vendor
来创建项目的vendor目录
/third_party
- 魔改过的第三方源码包
- 跟vendor区分,方便更新
/pkg
- 与/internal相对
- 外部项目可以直接导入,可以在/internal包中建立/pkg包,表示该包只能在此项目中共享,
/api
- api接口的定义文件,yml,protobuf等
- 以及通过这些定义文件生成的client代码
项目工具,构建和部署相关
Makefile
- 编译工程代码的指令入口
- 方便使用者对工程进行编译
/scripts
- 存放脚本文件,完成构建,安装,分析检查等功能
- Makefile文件中各个指令的具体实现
/tools
- 项目的一些脚本工具
- 可以调用/pkg和/internal下面的代码
/build
- 主要存放安装包和持续集成相关的文件
- 比如Dockerfile文件
/deployments
- 存放系统和容器编排部署配置和模板
- 比如docker-compose
/init
- 应用初始化相关脚本
- 比如systemd,和经常管理(比如supervisord)配置
外部测试代码和数据
/test
- 第三方的测试代码
文档
/docs
- 开发文档,用户手册,安装指南,设计文档等
/examples
- 存放工程内部和工程中可悲外部导入的包的示例代码
- 企业内部公共包可以提供使用这些包构建的一些内部项目地址
README.md
- 一般包含项目介绍,功能和安装指南,文档地址等
CHANGELOG
- 每次发版的内容
不建议的目录
/src
- GOPATH模式下,代码会被放到$GOPATH下面的src目录下
- 在导入路径中就会包含两个src目录
/model
- 不建议将实体类型都放到model目录里
- 按照业务领域来划分
- 参考:https://gitee.com/phper95/kratos-layout/tree/master/internal
/common、/util
- 无法看出包的具体功能
- 容易变成大杂烩
实际项目中的工程化设计
实际工程第三方包
|---cache
|---db
|---errors
|---es
|---httpclient
|---logger
|---mq
|---nosql
|---promethues
|---routine
|---shutdown
|---timeutil
|---trace
实际工程代码目录
|---config
|---const
|---deploy
|---doc
|---init
|---internal
|---biz
|---data
|---pkg
| |---errcode
| |---metric
| |---sign
|
|---repo
| |---mongodb
| |---mysql
| |---auth_repo
|
|---server
|---api
| |---api_response
| |---v1
|
|---middleware
| |---auth
| |---jwt
|
|---service
|---auth_service
Reference
慕课网:面向海量数据场景构建Go+ES8企业级搜索微服务