标题: [求推荐] 寻找开箱即用的 Go Web 模板(需 GORM + DI + 垂直切片架构),顺便探讨一下 Go 社区对 DI 的态度
大家好,
最近在做 Go 的 Web 项目选型,看了一圈生态里的框架,希望能找到一款偏向开箱即用的模板。想请大家推荐一下:
我理想中的框架特性:
开箱即用:不想从零开始拼凑路由、日志、配置和 ORM 等基础组件,希望能有一套成熟的默认约定。
深度集成依赖注入( DI ):希望框架能很好地管理对象的生命周期和依赖关系。
集成 GORM:因为业务原因,需要 GORM 作为核心的数据库 ORM 工具。
支持垂直切片架构( Vertical Slice Architecture ):这点极其重要!我不希望代码是按“技术职责”横向分层的(比如所有 controller 在一个包,所有 model 在一个包)。我希望框架的推荐实践是按“业务模块”来组织代码的。例如一个用户的业务,其结构应类似于:
/user
├── user.model.go
├── user.repository.go
├── user.service.go
└── user.controller.go
不知道大家有没有符合上述要求的脚手架或框架推荐?
另外,还有一个疑惑想和大家交流讨论:
在研究 Go Web 框架和各种开源模板的过程中,我发现一个现象:在 Go 语言生态中,大家似乎对“依赖注入( DI )”并不是特别热衷?
在 Java (Spring) 或 C# (.NET) 里,DI 几乎是刻在骨子里的标配,不使用 IoC 容器简直没法写代码。
想听听老哥们的看法,为什么 Go 的社区风气对 DI 容器显得比较克制?
是因为 Go 强调的“大道至简( Keep it simple )”和显式编程哲学?
是手动传递依赖在 Go 里写起来并没有那么繁琐?
还是说使用反射( Reflection )做运行期 DI 在 Go 中有什么性能隐患或难以调试的坑?
期待大家的框架推荐以及对 DI 问题的看法,提前感谢!
前提,本人对 go 语言没有任务基础,也是最近刚尝试使用。上面的讨论如有不当之处,请多多包涵。
推荐这个项目,进行定制自己的 template 。https://github.com/samber/do-template-api
go 的 Web 还有可选的嘛,除了 gin 还能选择什么?
不过我是直接手搓 web 框架,极致的手工业。
@Gilfoyle26 年后才开始接触 go ,扡 gin fiber echo iris 都看了一下。
@yikyo #6 推荐一个邪修 go web 框架:goframe ,这个框架有点反人类。https://i.imgur.com/NIvxivj.png
@NoobPhper 刚接触 go 有点不适应。跟我的想象中的不一样。
@lifei6671 不搞。。。怕搞坏了。。。
不明白为什么上面说 GoFrame 是邪修. 写 Go 快 10 年了,从一开始的 Martini/Beego 时代,到后面折腾 gin/echo 一类”路由框架”,也用过 go-zero 和 GoFrame. 现在 web 项目如果没有特殊要求我就默认用 GoFrame 了.
Gin/Echo/Chi 一类就像我上面说的更像”路由框架”.作为轻量级的 Web 框架有利就有弊 如果项目不是按传统的 MVC 这类架构来展开,需要使用 DDD 这样的,那么基本只能选这类框架自己搭建脚手架. 容易上手写写小项目,但是做中大型项目需要一些底子来组织文件/项目的结构,不然越写越乱. 还有 Model 层需要自己去找合适的.Gorm/Ent/Sqlc 这类,个人推荐 Echo+Sqlc
写到后期其实 Web 基本就那么一回事.Router->Logic(Controller)->Service(公用逻辑封装)->Model. Go-Zero/GoFrame 基本都做到了这些,GoFrame 的 Model 感觉比 Gorm 一类更方便,所以推荐.
把一件复杂的事情做简单是件很难得事情, 不要平白无故的增加 系统熵