关于 web 项目结构的规划

2022-10-21 09:47:50 +08:00
 blue7wings

从其他语言转 Go,沿用以前的习惯,一直采用传统的 MVC 结构,大致如下:

.
├── controller
│   ├── post
│   └── user
├── go.mod
├── main.go
├── model
│   ├── post
│   └── user
├── route
│   ├── post
│   └── user
└── service
    ├── post
    └── user

看到有人采用如下的结构,感觉更加符合 Go 语言的代码目录风格

.
├── go.mod
├── main.go
├── post
│   ├── controller
│   ├── model
│   ├── route
│   └── service
└── user
    ├── controller
    ├── model
    ├── route
    └── service

不知道各位项目中采用的是哪种目录结构,希望 Gopher 能给些参考,多谢多谢

4282 次点击
所在节点    Go 编程语言
18 条回复
jeesk
2022-10-21 09:52:07 +08:00
看领导, 只有统一就好了。
kongkongyzt
2022-10-21 10:09:08 +08:00
除了向外暴露的 api 接口在根目录下有一个叫 api 的目录,其他的代码都收到 internal 目录中
winnie2012
2022-10-21 10:18:19 +08:00
两种结构都可以,第二种更加边界更加内聚一些,方便改为微服务或者 Serverless
Asakijz
2022-10-21 10:20:09 +08:00
angrylid
2022-10-21 10:24:20 +08:00
我用第二种架构碰到过循环引用的问题。(不代表它不好只是我比较菜)
dqzcwxb
2022-10-21 10:37:35 +08:00
面向对象设计,增加项目可读性降低开发和维护成本
面向过程开发,会导致重复劳动但是方便团队分工从而提升整体效率
dudubaba
2022-10-21 10:46:22 +08:00
个人偏向第二种,移出模块只需要按目录就行了,不用每个文件夹里找。
kiddult
2022-10-21 10:46:53 +08:00
@angrylid 跟你没关系,这种结构,除非所有人脑袋都非常清醒,不然一定会有循环引用
mantis
2022-10-21 10:48:28 +08:00
@kongkongyzt 同意
SimbaPeng
2022-10-21 12:23:54 +08:00
slert
2022-10-21 12:25:30 +08:00
这和语言关系不大吧 看个人喜好
matrix1010
2022-10-21 12:25:59 +08:00
建议参考 grafana
sophos
2022-10-21 12:41:20 +08:00
wildlife
2022-10-21 13:09:19 +08:00
kratos-layout 这种类分层结构思路可以参考,不一定非得用 kratos 框架

https://github.com/go-kratos/kratos-layout
RedBeanIce
2022-10-21 13:25:26 +08:00
第二种
zhuweiyou
2022-10-21 13:44:45 +08:00
看具体情况吧.
我们基本是一个大项目下面,各自负责自己的模块(比如加一个活动就新增一个目录), 不太会有交集, 第二种更适合.
ElmerZhang
2022-10-21 14:18:18 +08:00
项目本身就是个微服务的话,第一种更合适
wencan
2022-10-21 15:14:51 +08:00
我都是采取三层模型:
服务层 /控制层: http service 、rpc service 、mq 消费者
业务逻辑实现层
数据访问层 /客户端层: http 调用、mysql 、redis 、mq 生产者等
另外,把一些不带业务逻辑的 struct 单独作为数据模型层,贯穿三层,算是挂了
https://github.com/wencan
欢迎交流

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/888620

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX