已经有不少优秀开源的 go 开发框架或脚手架,我为什么重新造轮子做了一个 go 开发框架。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gvison
V2EX    Go 编程语言

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

  •  1
     
  •   gvison 2024-07-21 23:17:17 +08:00 4984 次点击
    这是一个创建于 449 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 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

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

    14 条回复    2024-07-23 18:27:47 +08:00
    v1
        1
    v1  
       2024-07-21 23:29:27 +08:00   6
    已经有不少优秀开源的 go 开发框架或脚手架,我为什么重新造轮子做了一个 go 开发框架?

    > 闲的
    sumu
        2
    sumu  
       2024-07-21 23:40:57 +08:00 via Android   1
    在用 GoFrame ,只要看下文档,就明白在 go 开发框架这块,这个已经到顶了。
    另外,gf 脚手架很好用
    leetom
        3
    leetom  
       2024-07-21 23:58:50 +08:00
    @sumu 看着功能非常全,不知道用的人多不多,有没有坑
    dbpe
        4
    dbpe  
       2024-07-22 08:34:02 +08:00
    不知道为什么..我在国内看到最多的开源项目就是相关业务的...
    dododada
        5
    dododada  
    &nbp;  2024-07-22 10:03:24 +08:00
    @dbpe 因为研发类的不产生效益的开源,要很多很多钱
    diagnostics
        6
    diagnostics  
       2024-07-22 10:56:47 +08:00   2
    @dbpe

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

    国内研发类的岗位极其少,大部分都是 CRUD ,他们能接触和想到的也只有这些;
    基础研发类的岗位,大多数是 XX 项目的维护人或贡献者(公司招聘他们的目的也主要是这个),他们本身就为大型开源项目开发了(忙得要死,压根没时间造轮子)
    大多数都是练手开源、小部分是在内部也干这样的事情,然后搬到开源上来
    从公司内孵化而来(和上面有点重复,类似于 Kafka 不是从 Linkined 里面孵化,doris 从百度孵化),中小公司一般只能孵化出业务封装框架(降低成本的角度)要写一个难的,可能没这个资源(没人才、没精力)
    M7w2kh5a58AhKlcT
        7
    M7w2kh5a58AhKlcT  
       2024-07-22 11:08:53 +08:00
    @sumu #2 代码风格非常 PHP, 不够 Go Native
    lveye
        8
    lveye  
       2024-07-22 13:45:36 +08:00
    其实造轮子可以让开发真正理解清楚技术的实现原理,造些轮子可以技术成长的更快些
    mocococ
        9
    mocococ  
       2024-07-23 01:05:16 +08:00
    感觉好复杂.. 不如看看 goframe ,感觉 goframe 的设计真的不错~ 不管大到微服务开发、 项目结构、单体、多 app ,还是小到缓存处理、orm 、各种类型、系统工具。

    OP 要不参考参考..
    mocococ
        10
    mocococ  
       2024-07-23 01:11:11 +08:00
    @leetom 很不错~ 自从学 golang 以来 发现最稳的一个了
    sumu
        11
    sumu  
       2024-07-23 09:45:58 +08:00
    @leetom 有没有坑不知道,用了一年,没碰到问题。印象最深刻是中间接入 opentelemetry ,框架在 ctx 传递这块做得很棒,文档示例清晰,半天接完,比某些大厂做的框架,不知道高到哪儿去了。

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

    希望也能帮到其他看到帖子的程序员。
    qloog
        12
    qloog  
       2024-07-23 12:02:45 +08:00
    框架太多,玩转一个就行,多的学不过来,所以我只玩我熟悉的: https://github.com/go-eagle/eagle
    gvison
        13
    gvison  
    OP
       2024-07-23 12:37:28 +08:00
    @mocococ 觉得复杂可以尝试下在这里体验生成代码 https://go-sponge.com/ui/web-http 。浏览了下 goframe 的代码和文档,goframe 有的大部分功能 sponge 也是有的,开源的开发框架趋同化,个人感觉 goframe 主要更侧重 web 开发,在微服务方面没有微服务框架(go-zero 、kratos 等)成熟,个人更喜欢 kratos ,因此 sponge 参考了一些 kratos 。
    lllsj
        14
    lllsj  
       2024-07-23 18:27:47 +08:00
    发现竟然很早以前就 star 过了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3631 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:18 PVG 08:18 LAX 17:18 JFK 20:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86