跳到主要内容
版本:2.7.x

大家好啊!本次版本是 2022 年最后一个版本,也是 2023 年的第一个版本。该版本主要的目标:

  • 采用接口化设计解决了主框架对第三方开源组件 go-redis 耦合的问题,使得主框架更加轻量,对工具化使用框架的场景更加友好。
  • 通过开发工具提供升级 主框架、社区组件、开发工具 的命令,提高框架整体易用性,并解决常见的社区组件与主框架版本不一致问题。
  • 进一步按照接口与实现分离设计,通过社区组件方式,完善注册发现、配置管理对常用服务的对接,为下一步发布微服务组件做准备。

完整变更列表: https://github.com/gogf/gf/compare/v2.2.0...v2.3.1

新特性

  1. 将耦合较重的 redis 组件从主框架中解耦,作为社区组件提供。原有主框架增加 redis 接口定义,社区组件 redis 提供具体的接口实现。因此,请注意,主框架 gredis 组件的使用方式发生了一些变更,在依赖 redis 的项目中需要引入社区组件 redis 实现,否则方法执行将会返回错误。保留兼容原有基础的 Do/DoVar 方法,并增加了 100+ 项常用 redis 操作方法: NoSQL Redis
  2. 配置管理及注册发现组件新增常用服务接口实现:
  3. 新增工具命令 gf up,用于便捷的框架升级操作,具体介绍请查看: 框架升级-up

功能改进

社区组件

配置管理

  1. 新增 nacos 接口实现: https://github.com/gogf/gf/tree/master/contrib/config/nacos

注册发现

  1. 新增 zookeeper 接口实现: https://github.com/gogf/gf/tree/master/contrib/registry/zookeeper

数据库驱动

  1. 修复 clickhouse 在配置 Charset 参数时的报错问题。
  2. 改进 clickhouse 获取数据表结构结果,返回的 Index 顺序统一从 0 开始。
  3. 改进 oracle 表结构获取SQL,以支持 float64 数据类型。
  4. 修复 pgsql 对接口 CheckLocalTypeForField 的实现,名称被错误定义为了 CheckLocalTypeForValue,造成生成 dao 代码文件时的属性字段类型错误。
  5. 改进 pgsql 增加对 schema 的支持,由于 shcema 在大部分数据库服务中代表"数据库名称",并且也为了兼容旧版本,因此增加 Namespace 配置参数用以表示 pgsqlSchema,而原有的 Schema 对象代表 pgsqlcatalog

NoSQL组件

  1. 新增 redis 社区组件,实现 gredis 相关接口: https://github.com/gogf/gf/tree/master/contrib/nosql/redis

数据库组件

  1. gdb
  2. 为提高扩展性, TX 事务对象改为了接口定义,原有的 TX 对象改为了 TXCore 方便自定义接口实现对象的嵌套: ORM事务处理
  3. 增加 Namespce 配置项,用以支持个别数据库服务 Catalog&Schema 区分的问题,原有的 Schema 继续代表数据库名称,而新增的 NameSpace 代表个别数据库服务的 Schema 配置: ORM使用配置
  4. 改进数据库名称配置,增加对中文数据库名称的支持。
  5. 执行 SQL 日志中增加当前执行的数据库名称打印。
  6. 修复 Count 方法的缓存问题。
  7. gredis
  8. 新增 redis 社区组件,将耦合较重的 redis 组件从主框架中解耦,作为社区组件提供。原有主框架增加 redis 接口定义,而社区组件 redis 提供具体的接口实现。因此,请注意,主框架 gredis 组件的使用方式发生了一些变更,在依赖 redis 的项目中需要引入社区组件 redis 实现,否则方法执行将会返回错误。保留兼容原有的 Do/DoVar 方法,并增加了 100+ 项常用 redis 操作方法: NoSQL Redis

容器组件

  1. gpool
  2. 增加 MustPut 方法,在 Put 执行出错时直接 panic 而不是返回错误对象
  3. gqueue
  4. 改进 Len/Size 方法,解决可能存在的队列计数不准确问题。
  5. 改进 Len/Size 方法,返回参数类型由 int 改为 int64

错误处理

  1. gcode
  2. 增加 CodeNecessaryPackageNotImport 错误码。
  3. gerror
  4. 改进堆栈打印,统一使用空格替代 \t,以保证打印格式兼容不同的展示终端。

对象管理

  1. gins
  2. 单例对象增加分组锁机制,提升在高并发下的锁机制性能。

网络组件

  1. ghttp
  2. 支持在中间件中增加对当前执行路由方法的获取。
  3. 当路由方法执行的结果不为 200 时,支持在中间件中通过 Request.GetError 方法获取内部错误。
  4. 新增 Response.ServeContent 方法,用于自定义的内容输出接口实现。
  5. 改进反向代理支持,并增加反向代理示例: https://github.com/gogf/gf/blob/master/example/httpserver/proxy/main.go
  6. 改进错误日志输出,使用 error 错误级别,便于开发者在自定义日志 Handler 中识别日志类型。
  7. goai
  8. 新增对 security 标签的支持,用以配置 OpenAPIv3 安全密钥。
  9. 改进对带有 json 标签带有 , 符号时结构体属性的名称获取。
  10. gtcp
  11. SetSendDeadline 方法名称修改为 SetDeadlineSend
  12. SetReceiveDeadline 方法名称修改为 SetDeadlineRecv
  13. SetReceiveBufferWait 方法名称修改为 SetBufferWaitRecv
  14. gudp
  15. SetSendDeadline 方法名称修改为 SetDeadlineSend
  16. SetReceiveDeadline 方法名称修改为 SetDeadlineRecv
  17. SetReceiveBufferWait 方法名称修改为 SetBufferWaitRecv

系统组件

  1. gcache
  2. 修复 MustGetOrSetFunc 方法逻辑问题。
  3. 改进 LRU 缓存过期回收机制实现。
  4. gcmd
  5. 改进结构化命令行对象生成,当 brief 标签为空时,自动读取 dc 标签内容作为 brief,以保证命令行与接口定义标签习惯相同。
  6. gcron
  7. 改进日志处理,当给定的定时任务方法执行 panic 并且开发者没有设置 Logger 接口时,将会使用 glog.DefaultLogger 输出错误日志。
  8. 改进定时触发判断逻辑,解决在底层定时器执行间隔不准确时引起的定时任务触发问题。
  9. glog
  10. 改进在滚动切分特性开启时的初始化逻辑,解决在个别场景下的初始化失败导致滚动切分执行失败问题。
  11. 改进 Clone 方法,进一步浅拷贝提高链式操作性能。
  12. 新增 LevelPrint 配置,用以控制默认日志 Handler 是否打印日志级别字符串。
  13. gres
  14. 新增 Pack*WithOption 方法,用以提供更细致的资源打包选项控制。
  15. 标记方法废弃: Pack/PackToFile/PackToGoFile
  16. 新增 KeepPath 打包选项,用以控制是否在打包文件中保留给定的相对路径,而不是使用带有本地打包目录前缀的路径(相当于去掉了目录前缀)。
  17. grpool
  18. 新增 supervisor 特性,解决在 worker 数量较少的场景下,低概率下同时退出的问题。
  19. gstructs
  20. 新增 Tag* 方法,用以获取常见的标签值。
  21. gtime
  22. 改进 Equal/After/Sub 方法,解决在个别场景下的细节问题。
  23. 改进 EndOf* 方法,返回的时间对象由开发者控制 EndOf 计算的粒度。调整默认粒度,由纳秒改为秒粒度进行计算。
  24. 改进 SetTimeZone 时区设置方法,以实现不同系统下的兼容性,该方法只允许全局设置一次时区,多次调用设置不同时区将会返回错误: 时间管理-时区设置

文本处理

  1. gstr
  2. 修复 IsSubDomain 判断主域名为子域名的子域名问题。
  3. 改进 SubStr/SubStrRune 方法,支持以负数的 start 参数指定从右截取字符串。

工具组件

  1. gconv
  2. 新增 Ptr* 方法,用以任意类型到指定类型指针变量的转换。
  3. 改进 Map* 转换方法对递归转换的处理,默认只会递归转换嵌套的结构体属性。
  4. 改进 Scan 方法,解决属性同类型以及同类型指针到目标对象/指针的转换问题。
  5. gtag
  6. 将框架中所有的标签名称统一到该模块下通过常量维护。
  7. 增加 SetOver/SetsOver 方法,用于覆盖设置自定义的标签键值对。
  8. gutil
  9. 改进 Dump* 方法,支持循环嵌套的对象指针打印。
  10. 修复 Dump* 方法在部分场景下的反射报错问题。
  11. 新增 OriginValueAndKind/OriginTypeAndKind 方法,用于获取给定变量的反射值/类型对象,以及在指针变量下对应的原始反射值/类型对象。

功能修复

  1. 修复工具在部分环境下安装失败问题。
  2. 修复 New*ArrayRange 方法创建数组对象时,在部分场景下数组越界问题。
  3. 修复 contrib/drivers/clickhouse 在配置 Charset 参数时的报错问题。
  4. 修复 pgsql 数据库生成 dao 代码文件时的属性字段类型错误问题。
  5. 修复数据库ORM组件中 Count 方法的缓存问题。
  6. 修复 gstr.IsSubDomain 判断主域名为子域名的子域名问题。
  7. 修复 gutil.Dump* 方法在部分场景下的反射报错问题。

开发工具

  1. 增加 gf fix 命令,用于低版本升级高版本自动更新本地代码不兼容变更: 兼容修复-fix
  2. 增加 gf up 命令,用以将本地的框架低版本升级到最新的框架版本: 框架升级-up
  3. 改进 gf build 命令,在构建之前增加环境变量信息打印。
  4. 改进 gf pack 命令,增加 KeepPath 参数,用以控制资源打包后是否保留相对路径: 资源打包-pack
  5. 改进 gf gen dao 命令,生成的 Transaction 方法中 tx 参数从对象指针改为了接口。

兼容提示

  1. Redis 的使用方式发生变更,旧版方法保持兼容,但需要额外添加社区组件的引入(接口与实现分离),具体请查看文档。
  2. 数据库 ORMTX 对象从具体实现改为了接口,这块通过开发工具新增的 up 或者 fix 命令即可自动升级修复。

下一版本目标

  • 完善并发布 grpcx 社区组件,实现对 grpc 接口协议的扩展支持,并提高微服务开发易用性。
  • 官网新增【微服务开发】系列章节,主要以 grpc 开发为主介绍使用 goframe 进行微服务开发。
  • 主框架去掉对第三方开源组件 gorilla/websocket 的耦合,将 WebSocket 的支持接口化,按照框架的通用解耦设计,通过社区组件提供具体实现,提供扩展性和灵活性。