Golang Go语言中已有众多优秀开源开发框架或脚手架,为何我还选择重新造轮子做一个Go开发框架

发布于 1周前 作者 sinazl 来自 Go语言

使用 go 开发项目多年,了解和使用过不少 go 框架,例如 web 框架有 gin 、echo 、fiber 、iris 、beego 等,微服务框架有 grpc 、go-micro 、kratos 、go-zero 等,无论是 web 框架或微服务框架,当深入了解使用一个框架之后,同类的框架都比较容易上手使用。

开发一个完整后端服务通常不止只有框架代码,还有 API 设计、数据库、测试、文档、配置、部署和监控等等,如果经常使用 gin 开发 web 服务都知道,由于 gin 过于轻量简洁,从 0 开始搭建一个完整的 web 后端服务还是过于麻烦,需要像搭积木一样拼接成完整的后端服务,达不到预想的一键创建一整套完整的后端服务代码。而使用微服务框架可以创建一整套目录结构代码,还有包含了配置、api 文档、部署和监控等。而在根据多种类型数据的表生成 CRUD api 方面没怎么支持(这不是微服务框架需要考虑的,毕竟使用什么数据库和 orm 由使用者决定)。如果开发一个业务相对简单的 web 服务,通常又不会使用微服务框架。

我实现一个从项目层级的开发框架目的是能够把以往开发项目经验固化下来,这对于提升个人开发技术水平和解决问题能力具有极大的帮助,从项目层面思考和设计架构,并将其经验应用于其他项目开发中,方便自己和也方便团队开发,在团队协作中使用统一的开发框架可以提高代码的一致性和可维护性,如果团队成员对现有框架有不同的意见和建议,则可能导致沟通成本上升。

注:这里的项目层级的开发框架是指一键创建包含了 web 或 grpc 框架、常用中间件或拦截器、API 、配置、orm 、测试、文档、部署和监控等等,大多情况只需关心编写业务逻辑代码。理论上从项目层级看,越往项目层设计的开发框架,可以做到自动化会越高,而 web 框架或微服务框架从框架层级设计,自动化程度没那么高,当然可以在框架层级基础上转换到项目层级设计。

实现的在项目层级的 go 开发框架 sponge 没有从 0 开始,而是选择在 gin 和 grpc 两个基础上设计,因为这两个框架都是比较轻量级,可以定制化程度更高。

sponge 主要特点:

  • 内置了丰富的生成代码和合并代码功能,自动化程度更高,减少了大量原本需要手动编写的代码,只需专注于编写业务逻辑代码。
  • 支持基于 mysql 、mongodb 、postgresql 、tidb 、sqlite 表来生成 CRUD 代码。
  • 支持在 UI 界面上生成代码,更简单易用。
  • 支持丰富的 gin 中间件、grpc 拦截器,同时有很好的可扩展性。
  • 包含丰富的常用的组件,开箱即用。
  • 支持创建多种服务类型:
    • ⓵基于 sql 创建 web 服务 (gin, gorm 或 mongo)
    • ⓶基于 sql 创建 grpc 服务 (grpc, gorm 或 mongo)
    • ⓷基于 protobuf 创建 web 服务 (gin)
    • ⓸基于 protobuf 创建 grpc 服务 (grpc)
    • ⓹基于 protobuf 创建 grpc 网关服务 (gin)
    • ⓺基于 protobuf 创建 grpc+http 服务(gin, grpc)

GitHub 地址: https://github.com/zhufuyi/sponge

优秀的开发框架或脚手架有很多,选择适合自己或团队来解决实际问题就是好的选择。


Golang Go语言中已有众多优秀开源开发框架或脚手架,为何我还选择重新造轮子做一个Go开发框架

更多关于Golang Go语言中已有众多优秀开源开发框架或脚手架,为何我还选择重新造轮子做一个Go开发框架的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

15 回复

已经有不少优秀开源的 go 开发框架或脚手架,我为什么重新造轮子做了一个 go 开发框架?

> 闲的

更多关于Golang Go语言中已有众多优秀开源开发框架或脚手架,为何我还选择重新造轮子做一个Go开发框架的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在用 GoFrame ,只要看下文档,就明白在 go 开发框架这块,这个已经到顶了。
另外,gf 脚手架很好用

看着功能非常全,不知道用的人多不多,有没有坑

不知道为什么…我在国内看到最多的开源项目就是相关业务的…

因为研发类的不产生效益的开源,要很多很多钱



三个词:简单、门槛低、可以借鉴

国内研发类的岗位极其少,大部分都是 CRUD ,他们能接触和想到的也只有这些;
基础研发类的岗位,大多数是 XX 项目的维护人或贡献者(公司招聘他们的目的也主要是这个),他们本身就为大型开源项目开发了(忙得要死,压根没时间造轮子)
大多数都是练手开源、小部分是在内部也干这样的事情,然后搬到开源上来
从公司内孵化而来(和上面有点重复,类似于 Kafka 不是从 Linkined 里面孵化,doris 从百度孵化),中小公司一般只能孵化出业务封装框架(降低成本的角度)要写一个难的,可能没这个资源(没人才、没精力)

#2 代码风格非常 PHP, 不够 Go Native

其实造轮子可以让开发真正理解清楚技术的实现原理,造些轮子可以技术成长的更快些

感觉好复杂… 不如看看 goframe ,感觉 goframe 的设计真的不错~ 不管大到微服务开发、 项目结构、单体、多 app ,还是小到缓存处理、orm 、各种类型、系统工具。

OP 要不参考参考…

很不错~ 自从学 golang 以来 发现最稳的一个了

有没有坑不知道,用了一年,没碰到问题。印象最深刻是中间接入 opentelemetry ,框架在 ctx 传递这块做得很棒,文档示例清晰,半天接完,比某些大厂做的框架,不知道高到哪儿去了。

要感谢 V 站,一年前我在做 Go 框架选型时,选型侧重点是脚手架与文档,因为这个对于开发效率影响太大了,脚手架功能越强大,后期迭代效率越高,但都不太满意,本来准备用 gin 了,自己写几个小工具做脚手架,有一个框架撕逼贴,有人推荐 GoFrame ,从未耳闻过,我抱着试一试的想法,结果大为惊艳,从来没见过这么强大的脚手架,gf gen dao ,这个也能有?之前都是 goorm 手动生成的,gf gen ctrl 这个也可以?正是我要的! go gen service 这是什么鬼?这个用法太奇怪了吧,习惯后,真香。在看文档,妈呀,这是能免费享受的么。

希望也能帮到其他看到帖子的程序员。

框架太多,玩转一个就行,多的学不过来😔,所以我只玩我熟悉的: https://github.com/go-eagle/eagle

觉得复杂可以尝试下在这里体验生成代码 https://go-sponge.com/ui/web-http 。浏览了下 goframe 的代码和文档,goframe 有的大部分功能 sponge 也是有的,开源的开发框架趋同化,个人感觉 goframe 主要更侧重 web 开发,在微服务方面没有微服务框架(go-zero 、kratos 等)成熟,个人更喜欢 kratos ,因此 sponge 参考了一些 kratos 。

发现竟然很早以前就 star 过了

在Go语言(Golang)生态系统中,确实存在许多出色的开源开发框架和脚手架,这些工具为开发者提供了丰富的功能和良好的社区支持。然而,您选择重新开发一个Go开发框架,这一决定可能基于以下几个合理的考量:

  1. 定制化需求:现有的框架可能无法满足您项目的特定需求或业务逻辑。自定义框架可以确保完全符合您的设计理念和功能要求。

  2. 性能优化:针对特定应用场景,自定义框架可以针对性能瓶颈进行针对性优化,提供比通用框架更高的运行效率。

  3. 学习与实践:通过构建自己的框架,您可以更深入地理解Go语言的特性和最佳实践,这对于提升个人技能和团队技术水平是非常有益的。

  4. 长期维护:拥有自己的框架意味着您可以根据自己的节奏进行更新和维护,无需依赖第三方库的发布周期。

  5. 创新探索:在开发过程中,您可能会发现新的设计模式或技术趋势,这些都可以在您的框架中得到实践和应用。

当然,重新造轮子并非易事,需要投入大量的时间和精力。但在确保上述优势的同时,也建议您充分考虑现有框架的成熟度和社区支持,以做出最符合项目需求的决策。最终,选择最适合您项目的开发框架,将有助于提高开发效率和代码质量。

回到顶部