从其他语言转 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 能给些参考,多谢多谢
1 jeesk 2022-10-21 09:52:07 +08:00 看领导, 只有统一就好了。 |
![]() | 2 kongkongyzt 2022-10-21 10:09:08 +08:00 除了向外暴露的 api 接口在根目录下有一个叫 api 的目录,其他的代码都收到 internal 目录中 |
![]() | 3 E2gCaBAT5I87sw1M 2022-10-21 10:18:19 +08:00 两种结构都可以,第二种更加边界更加内聚一些,方便改为微服务或者 Serverless |
![]() | 4 Asakijz 2022-10-21 10:20:09 +08:00 |
![]() | 5 wakarimasen 2022-10-21 10:24:20 +08:00 via Android 我用第二种架构碰到过循环引用的问题。(不代表它不好只是我比较菜) |
6 dqzcwxb 2022-10-21 10:37:35 +08:00 ![]() 面向对象设计,加项目可读性降低开发和维护成本 面向过程开发,会导致重复劳动但是方便团队分工从而提升整体效率 |
![]() | 7 dudubaba 2022-10-21 10:46:22 +08:00 个人偏向第二种,移出模块只需要按目录就行了,不用每个文件夹里找。 |
![]() | 9 mantis 2022-10-21 10:48:28 +08:00 @kongkongyzt 同意 |
10 SimbaPeng 2022-10-21 12:23:54 +08:00 |
![]() | 11 slert 2022-10-21 12:25:30 +08:00 这和语言关系不大吧 看个人喜好 |
![]() | 12 matrix1010 2022-10-21 12:25:59 +08:00 via iPhone 建议参考 grafana |
![]() | 13 sophos 2022-10-21 12:41:20 +08:00 |
14 wildlife 2022-10-21 13:09:19 +08:00 |
![]() | 15 RedBeanIce 2022-10-21 13:25:26 +08:00 第二种 |
16 zhuweiyou 2022-10-21 13:44:45 +08:00 看具体情况吧. 我们基本是一个大项目下面,各自负责自己的模块(比如加一个活动就新增一个目录), 不太会有交集, 第二种更适合. |
![]() | 17 ElmerZhang 2022-10-21 14:18:18 +08:00 项目本身就是个微服务的话,第一种更合适 |
![]() | 18 wencan 2022-10-21 15:14:51 +08:00 我都是采取三层模型: 服务层 /控制层: http service 、rpc service 、mq 消费者 业务逻辑实现层 数据访问层 /客户端层: http 调用、mysql 、redis 、mq 生产者等 另外,把一些不带业务逻辑的 struct 单独作为数据模型层,贯穿三层,算是挂了 https://github.com/wencan 欢迎交流 |