项目开发-目录结构 | Go
如果仅是一个简单的功能,项目的布局并不需要精心设计。而在项目逐渐扩大的过程中,保持良好的代码结构非常重要。如果不注意,最终可能会得到一个混乱的代码,其中包含大量隐藏的依赖项和全局状态。当项目有更多的参与者时,也需要更多的组织结构。因此,了解如何有效地管理包和库、组织项目的布局是非常重要的。
项目的目录结构没有统一的模板,不同项目的目录结构,要依据项目类型、大小及灵活程度做调整,但也遵循一定的规范。
命名要求和规范
命名清晰:目录命名要清晰、简洁,不要太长,也不要太短。目录名要能清晰地表达出该目录实现的功能,并且目录名最好用单数(特殊情况,如 /docs、/examples)。一方面是因为单数足以说明这个目录的功能,另一方面可以统规范,避免单复混用的情况。
功能明确:一个目录所要实现的功能应该是明确的、并且在整个项目目录中具有很高的辨识度。当需要新增一个功能时,我们能够非常清楚地知道把这个功能放在哪个目录下。
全面性:目录结构应该尽可能全面地包含研发过程中需要的功能,例如文档、脚本、源码管理、API 实现、工具、第三方包、测试、编译产物等
可观测性:项目规模一定是从小到大的,所以一个好的目录结构应该能够在项目变大时,仍然保持之前的目录结构。
可扩展性:每个日录下存放了同类的功能,在项目变大时,这些目录应该可以存放更多同类功能。
MVC模式
MVC(Model View Controller)是软件工程中的一种软件架构模式,该模式将用户界面和业务逻辑分离,以使代码可扩展性、可复用性、可维护性、灵活性加强。它把软件系统分为三个基本部分:模型(model)、视图(view)、控制器(controller)。
View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。
Golang项目目录结构也有一些MVC的影子。
示例目录结构
golang-standards/project-layout
├── api ├── assets ├── build ├── cmd ├── configs ├── deployments ├── docs ├── examples ├── githooks ├── go.mod ├── init ├── internal ├── LICENSE.md ├── Makefile ├── pkg ├── README_zh-CN.md ├── scripts ├── test ├── third_party ├── tools ├── vendor ├── web └── website
-
├── server ├── api (api层) │ └── v1 (v1版本接口) ├── config (配置包) ├── core (核心文件) ├── docs (swagger文档目录) ├── global (全局对象) ├── initialize (初始化) │ └── internal (初始化内部函数) ├── middleware (中间件层) ├── model (模型层) │ ├── request (入参结构体) │ └── response (出参结构体) ├── packfile (静态文件打包) ├── resource (静态资源文件夹) │ ├── excel (excel导入导出默认路径) │ ├── page (表单生成器) │ └── template (模板) ├── router (路由层) ├── service (service层) ├── source (source层) └── utils (工具包) ├── timer (定时器接口封装) └── upload (oss接口封装)
示例
├── conf (配置初始化) ├── cache (缓存处理) ├── controller (请求入口) ├── biz (业务逻辑) ├── errorcode (错误处理) ├── format (格式化数据处理) ├── logs (日志) ├── middleware (中间件) ├── model (数据关系映射) ├── request (参数处理) ├── router (路由) ├── service (服务底层处理/远程调用) ├── utils (工具类)
示例
├── app (应用) ├── api (控制层) ├── consts (常量定义) ├── dao (数据层) ├── internal (模型生成) ├── middleware (中间件) ├── model (处理数据类型定义) ├── request (请求返回定义) ├── service (服务层) ├── conf (配置项) ├── core (核心) ├── docs (文档生成) ├── logs (日志) ├── router (路由) ├── utils (工具)
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0许可协议,转载请注明出处
本文链接:https://blog.redamancy.tech/technique/19