关于自己对 Go web 的包结构理解

2022-07-11 07:58:32 +08:00
 Cola98

不同语言的项目结构都不太一样的,就像 MVC 并不是 Java 的专属,但是现在提到 MVC 大家都会提到 Java ,从而到 spring/spring Boot 。

这里推荐一个项目结构,它并不是 golang 官方的标准,再加上阿里的 Java 开发手册,如下所示:

像 internal 这种就可以根据自己的需求来,我是参考了阿里的 Java 开发手册还有之前在上海实习的时候的项目结构。

这是我写的博客中一部分,附上博客链接( https://shuimo03.github.io/)

3518 次点击
所在节点    程序员
27 条回复
cooper
2022-07-11 08:03:25 +08:00
挺好,建议 controller 改为 handle 。
ychost
2022-07-11 08:03:43 +08:00
GO 就不要搞 Java 的结构了,太啰嗦
Cola98
2022-07-11 08:31:49 +08:00
@cooper 嗯嗯,之前主要是习惯了
Cola98
2022-07-11 08:32:45 +08:00
@ychost 嗯嗯,也是参考了一些别的项目,发现像 Java 的比较多一点,但是这样写起来心智负担比较大
charmToby
2022-07-11 09:09:41 +08:00
model 和 dao 层我感觉可以放一起
fiypig
2022-07-11 09:10:14 +08:00
db 可以改成 config 因为不单单是 db, 其实 go 最方便就是自己造,随便弄,过于约束也很麻烦
panlatent
2022-07-11 09:12:30 +08:00
赞同 #2 的,目录结构多花心思搞 多设计下没毛病,但是类似 Java 之类的结构,拿到了 Go 是真的水土不服。
dacapoday
2022-07-11 09:27:59 +08:00
如果是小型 web 程序,这种结构太沉重了。java 是历史原因导致的,但 go 没有这种包袱。
dacapoday
2022-07-11 09:30:49 +08:00
@dacapoday go 的关键词比较少,表达能力不如 java ,采用 java 的这种结构会多很多代码。让 go 的开发效率像 java 一样低效,费人力。
sadfQED2
2022-07-11 09:31:28 +08:00
dao 和 model 可以合成一个,两个比较冗余,但问题也不大

controller 和 service 中间还应该加一层,因为 service 之间不能互调,互调的业务逻辑放到 controller 中也不合适
zhangzEric
2022-07-11 09:35:11 +08:00
OP 博客里很多没完成的文章啊,本来抱着探索的希望进去,好几篇都是写一半空一半,建议 OP 后续有空填一下坑😂
coolair
2022-07-11 10:02:47 +08:00
这种结构真没必要用 Go 了,直接用 Java 不香吗?
qW7bo2FbzbC0
2022-07-11 10:06:58 +08:00
- adapter
- model
- controller
- service/repository
- helper
sciel
2022-07-11 10:12:37 +08:00
/
├── api
├── internal
│ ├── cmd 入口指令
│ ├── consts
│ ├── controller
│ ├── dao
│ ├── model
│ └── service
├── manifest 配置文件
├── resource
├── utility 通用工具
├── go.mod
└── main.go

我觉得这个就挺好,来自 goframe
LoNeFong
2022-07-11 10:32:49 +08:00
keepeye
2022-07-11 11:15:45 +08:00
goframe 的分层设计可以参考一下
freakxx
2022-07-11 12:11:08 +08:00
@sadfQED2 #10

这个其实是我一大难受的地方,不知有没比较好的处理方式。

比如
A service 需要 调用 B service 的某一个 func
B service 反过来可能需要用到 B service 的 func

抛上一层后,还是解决不了循环引用的问题,总感觉不够直觉性。
然后这里就会开始变得有点脏,要么是冗余,要么就是需要做一些繁琐的处理。
sadfQED2
2022-07-11 12:16:52 +08:00
@freakxx #17

所以 controller 和 service 之间应该加一个业务逻辑层呀,专门用来调多个 service
blless
2022-07-11 14:52:23 +08:00
要我说不如 DDD 。写到很多复杂业务的时候,无脑 controller 其实发现很多代码不知道放哪里,最后又都放到 controller 里,分了其实最后也没怎么分。DDD 从开始会让你拆分业务领域,持久层跟表现层其实都不是业务的重点。
freakxx
2022-07-11 14:58:33 +08:00
@sadfQED2 #18
是这么说,但就像#19 说的,业务代码膨胀后,代码有时会有些不知放哪,挺烦恼的事情

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

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

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

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

© 2021 V2EX