-
项目下的目录和文件命名一律小写,有必要的用下划线_,目录名一律单数形式,目录下的包名尽量与目录名一致;
-
cmd目录用于存放用于编译可运行程序的
main
源码,它又分成了子级目录,主要是考虑一个项目可能有多种可运行程序; -
如果整个项目只有一个可运行程序,推荐把main.go直接放在项目根目录下;
-
手动编写swagger v2的项目的api文档,或者借助第三方工具自动生成项目的swagger v2 api文档;
-
src
目录放主要源码,集中在这个目录主要是为了方便查找和替换。src
目录下除了app.go
,router.go
这种顶层入口,又细分如下:util
,工具函数,不会依赖本项目的任何其它逻辑,只会被其它源码依赖;service
,对外部服务的封装,如对 mongodb、redis、zipkin 等 client 的封装,也不会依赖本项目util
之外的任何其它逻辑,只会被其它源码依赖;schema
,数据模型,与数据库无关,也不会依赖本项目util
之外的任何其它逻辑,只会被其它源码依赖;model
,通常依赖util
,service
和schema
,实现对数据库操作的主要逻辑,各个 model 内部无相互依赖;bll
,Business logic layer,通常依赖util
,schema
和model
,通过组合调用model
实现更复杂的业务逻辑;api
,API 接口,通常依赖util
,schema
和bll
,挂载于 Router 上,直接受理客户端请求、提取和验证数据,调用bll
层处理数据,然后响应给客户端;ctl
,Controller,类似api
层,通常依赖util
,schema
和bll
,挂载于 Router 上,为客户端响应 View 页面;- 其它如
auth
、logger
等则是一些带状态的被其它组件依赖的全局性组件。
与
cmd
、src
平级的目录可能还会有:web
前端源码目录;config
配置文件目录;vendor
go 依赖包目录;dist
编译后的可执行文件目录;doc
文档目录;k8s
k8s 配置文件目录等。
注意:src目录可以去掉,把src下面的目录提升到项目根目录也是一种推荐方式;