整体优缺点

可以把goframe比作 windows,整体性强,结合都高,开箱即用。而gin,则类似于linux,各组件小而独立,通过融合各个组件,完全可以组成一个比goframe更好的二开平台,但技术要求高,时间跨度长。

goframe 优点

  • 整体全面,基本覆盖建设企业级系统所需的组件
  • 文档全面具体,基本上可以在文档中找到答案。

goframe 缺点

  • 有停止维护的风险
  • 较封闭,类似微软DotNet,平台涉及各个方面,一旦出现bug,无法整体替换,第三方组件兼容性尚不明确。
  • 虽然官方文档全面,但公网上文档比较少。

gin 优点

  • 较轻量级,事实上是加了路由和模板功能的net/http库
  • 第三方组件兼容性好,可以自由选择第三方组件

gin 缺点

  • 过于轻量级,初学者初期需要花时间去寻找学习第三方组件的使用方式,并将其融合到项目中
  • 官方文档较简单
  • 没有工程化的组件,需要自行研究引入。

核心关注点

开发文档

  • goframe 全面具体。
  • gin 官方文档过于简单,有基础的示例,但不全。具体问题需要大量求助于google

ORM

  • goframe 使用自带的 gdb 实现
  • gin 可通过引入第三方(如gorm)实现

路由管理

路由规则和注册方法有一些区别,goframe 路由存在优先级,会按照优先级排序,gin 则是出现冲突时直接报错。中间件方面能实现的功能类似。

请求输入

  • 对待输入参数的顺序处理有一些区别。主要是因为底层依赖的库不一样,但最终能达到的结果差不多。
  • 转换 对象,json,xml 为结构体相差不多,gin不支持 json,xml 参数绑定默认值,但影响不大,可用其他方法实现赋予默认值。
  • 都支持ctx中自定义变量

cookie

  • goframe 中的cookie是一个对象,对象还封装了 sessionId相关的方法
  • gin 的 cookie 比较简单,只是一个字符串

session

  • goframe 通过request 获取 session,gin则是通过在中间件处引入gin-contrib/sessions库来实现
  • 都支持把session放在cookie、redis、memcached、MongoDB等中。

配置管理

  • goframe自带
  • gin 无

日志组件

  • goframe 功能较为全面,涵盖日志级别,错误堆栈打印,链式操作等特性。
  • gin 使用中间件,可以将日志输出,只能完成基本功能,这种做法可能会有性能瓶颈,需引入第三方,增强功能,提高性能。

错误处理

  • goframe 可输出错误堆栈,添加错误码,以对开发者友好的方式输出
  • gin则是以go原生异常抛出方式处理。

数据校验

  • goframe 自带
  • gin 默认引入第三方解决

类型转换

  • goframe 自带,支持基本类型,map,结构体。高级用法支持通过scan方法实现任意参数到struct/struct数组/map/map数组的转换,并且根据开发者输入的转换目标参数自动识别执行转换。支持通过自定义类型转换规则做类型转换。
  • gin 无

缓存管理

  • goframe 自带,支持内存缓存,redis适配,通过缓存适配实现存储到对应的cache对象上。
  • gin 无

链路跟踪

  • goframe 自带OpenTelemetry实施标准支持
  • gin 无

微服务支持

  • 除链路跟踪外,无区别。
  • 当前都尚未考虑到大规模微服务场景支持。

实用工具类

  • goframe自带,较全
  • gin 无

构建部署流程

无区别

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐