Skip to content

Latest commit

 

History

History
22 lines (15 loc) · 2.19 KB

Go语言完整的应用项目结构最佳实践.md

File metadata and controls

22 lines (15 loc) · 2.19 KB
  • 项目下的目录和文件命名一律小写,有必要的用下划线_,目录名一律单数形式,目录下的包名尽量与目录名一致;

  • cmd目录用于存放用于编译可运行程序的 main 源码,它又分成了子级目录,主要是考虑一个项目可能有多种可运行程序;

  • 如果整个项目只有一个可运行程序,推荐把main.go直接放在项目根目录下;

  • 手动编写swagger v2的项目的api文档,或者借助第三方工具自动生成项目的swagger v2 api文档;

  • src 目录放主要源码,集中在这个目录主要是为了方便查找和替换。src 目录下除了 app.gorouter.go 这种顶层入口,又细分如下:

    1. util,工具函数,不会依赖本项目的任何其它逻辑,只会被其它源码依赖;
    2. service,对外部服务的封装,如对 mongodb、redis、zipkin 等 client 的封装,也不会依赖本项目 util 之外的任何其它逻辑,只会被其它源码依赖;
    3. schema,数据模型,与数据库无关,也不会依赖本项目 util 之外的任何其它逻辑,只会被其它源码依赖;
    4. model,通常依赖 utilserviceschema,实现对数据库操作的主要逻辑,各个 model 内部无相互依赖;
    5. bll,Business logic layer,通常依赖 utilschemamodel,通过组合调用 model 实现更复杂的业务逻辑;
    6. api,API 接口,通常依赖 utilschemabll,挂载于 Router 上,直接受理客户端请求、提取和验证数据,调用 bll 层处理数据,然后响应给客户端;
    7. ctl,Controller,类似 api 层,通常依赖 utilschemabll,挂载于 Router 上,为客户端响应 View 页面;
    8. 其它如 authlogger 等则是一些带状态的被其它组件依赖的全局性组件。

    cmdsrc 平级的目录可能还会有:web 前端源码目录;config 配置文件目录;vendor go 依赖包目录;dist 编译后的可执行文件目录;doc 文档目录;k8s k8s 配置文件目录等。

注意:src目录可以去掉,把src下面的目录提升到项目根目录也是一种推荐方式;