整体优缺点
可以把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则是以go原生异常抛出方式处理。
数据校验
类型转换
- goframe 自带,支持基本类型,map,结构体。高级用法支持通过scan方法实现任意参数到struct/struct数组/map/map数组的转换,并且根据开发者输入的转换目标参数自动识别执行转换。支持通过自定义类型转换规则做类型转换。
- gin 无
缓存管理
- goframe 自带,支持内存缓存,redis适配,通过缓存适配实现存储到对应的cache对象上。
- gin 无
链路跟踪
- goframe 自带OpenTelemetry实施标准支持
- gin 无
微服务支持
- 除链路跟踪外,无区别。
- 当前都尚未考虑到大规模微服务场景支持。
实用工具类
构建部署流程
无区别