Go开发必看:分层架构与目录规划全攻略

文摘   2025-01-26 09:50   四川  

做Go项目时,分层和目录结构的规划像设计房间格局一样,哪间放衣服、哪间做饭、哪间睡觉,各有各的用途。搞对了住着就舒服,搞混了就会不停地乱。想让代码后续不混乱、好扩展,合理的架构和规划最为关键。下面我结合一些常见的Go项目场景,帮你一步步看出怎么设计更加顺畅。

一、为啥要分层?

分层其实是让你自己省心。大家都清楚房间里每个东西摆在什么地方,要用时很快能找到。业务逻辑与数据交互分开来放,各自独自运作。比方说,同样是处理订单的流程,先通过用户接口层接收数据,紧接着拿到逻辑层加工处理,最后交到数据库层存起来。每个过程都归于自己区域做自己该干的事儿。一开始习惯了这种"干净"的方式,后面不会自己搅乱自己。毕竟代码不仅仅是让机器读的,更是让人读的。一个项目扔给新人,立刻能看清结构,这个时候你就明白了前期规划的重要性。


二、怎么设计这三层?

最常用的三层架构,比较贴近常见Go项目:表现层、业务逻辑层、数据层。先从简单三层开始,以后业务复杂再叠加新的结构也不迟。这时你可以从自己的项目场景切入。搞个小模块简单体验三层结构,比如用户注册流程。页面提交用户信息进系统后,表现层抓住数据,但不去管别的事儿,把计算、校验、流程交给逻辑层去搞定,最后需要持久化,存进数据库的动作甩给数据层来处理。三个大模块的分工大致就是这么定。接下来的工作就是依照这个格局布置"家具"。


三、目录结构咋整?

搞懂分层,目录结构就是细活。Go有它的习惯,有时得多考虑一下日常使用习惯,要不总会显得别扭。给你看一个简洁的起始结构:


myapp/

├── cmd/

│   └── myapp/

│       └── main.go

├── internal/

│   ├── delivery/

│   ├── service/

│   ├── repository/

│   └── model/

├── pkg/

├── configs/

└── web/

这里每块怎么用,细细说来:


cmd/myapp/main.go:作为整个程序的门面入口,无外乎初始化一些配置和启动服务。整体别搞得太复杂,简单准备直接进入。

internal/delivery/:放Handler相关的东西,这地方接收请求。类似服务员接了菜单等后厨处理,具体怎么搞它不管。而具体下层会处理这些细节。

internal/service/:顾名思义,所有逻辑汇聚于此。管你是新业务还是复杂交互,通用逻辑、计算一应放这里处理,外卖做好之后最终交出来。Handler取到最终处理完的"菜"后直接交付客户。

internal/repository/:存取数据具体操作在此实现,跟数据库等底层技术层打交道。具体东西由上层的业务安排拿数据,然后通过这个入口找数据库拿。常常你就轻松点,find、save这类的接口在此归纳完了。不乱搞数据库代码。

internal/model/:这儿敲定实体结构,页面上想表现成什么样子,有了这个档你就是一盘下锅了的菜,均围绕它写代码。看着就很明白的一条主线。

pkg/:放内部通用工具函数之类的,每项目多少都有一大坨通用工具。定时任务模块、Hash算法函数等闲杂小工具或者独立出来供多处共用的东西,全都集中在里面。避免自己在代码里前面写了后面无处用。

configs/:这是个朴实的目录,几乎一个项目变得稍复杂时,大家都离不开配置。摆在这个文件夹不再头疼各种频繁变动的事,让项目开发更为合理。

web/:可以简单丢些网页有关的内容,类似模板静态资源、或者要通过页面渲染的东西也可以把它搁在这儿放好。整个目录一明了然还立体全面。

注意文件别埋太深,确保三层之内到的了任何应该到的地方,看久乱的结构你自己受不了,更别提别人也很难接着上手。


粒粒快点跑
我是粒姐,11年老猎头,职业咨询顾问,曾创立两家猎头公司。 分享求职技巧和职场经验,职业愿景是帮助1000人找到心仪工作。 猎聘签约求职教练,1V1咨询,求职辅导,职业规划咨询,职场辅导。视频号:#粒粒快点跑
 最新文章