👋 Hi,朋友们! GoFrame 框架 v2.2.0 版本在今天正式发布啦!

本次版本的最大的看点在于:

  • 重构并改进了开发者最频繁使用的校验组件,使得社区的开发者可以很方便地开发和维护内置校验规则。并且扩增了一些常用校验规则,使得组件内置规则更加丰富强大。
  • 改建了数据库组件接口设计,使得社区开发者可以更简单地新增一个数据库类型的 driver,目前框架通过社区组件的方式提供了 9 种数据库类型的 driver 实现,满足绝大部分业务项目的需求。尤其是本次版本新增了对国产达梦数据库的支持,未来我们期望社区的开发者能提供更多国产数据库类型的 driver 实现,贡献给开源社区。
  • 社区组件的丰富,本次主要新增了 3 种类型的配置中心接口实现,支持 Apollo/Polaris/Kubernetes ConfigMapGoFrame 框架采用了模块化低耦设计,组件分为框架主库与社区组件。框架主库提供核心通用轻量的基础组件,而社区组件是与框架主库解耦的单独组件包,保证主库通用轻量的同时为框架扩充了更多的能力。
  • 本次版本的代码贡献者超过 44 位,框架的贡献者达到了 107 位。感谢大家为社区付出的努力和贡献!💖

Github ChangeLog: https://github.com/gogf/gf/releases/tag/v2.2.0

新特性

  1. 重构校验组件的内置校验规则管理器,增加并支持到了 59 种常用内置校验规则: 数据校验-校验规则
  2. 新增社区组件 contrib/config/kubecm,实现基于 kubernetes configmap 的配置组件 Adapter 实现: https://github.com/gogf/gf/tree/master/contrib/config/kubecm
  3. 新增社区组件 contrib/config/apollo,实现基于 apollo 配置中心的配置组件 Adapter 实现: https://github.com/gogf/gf/tree/master/contrib/config/apollo
  4. 新增社区组件 contrib/config/polaris,实现基于 polaris 配置中心的配置组件 Adapter 实现: https://github.com/gogf/gf/tree/master/contrib/config/polaris
  5. 新增 contrib/drivers/dm 国产达梦数据库 支持: https://github.com/gogf/gf/tree/master/contrib/drivers

主要改进

社区组件

ORM驱动实现

  1. 改进 contrib/drivers/pgsql 在ORM组件层面支持更多 pgsql 内置的数据类型。
  2. 改进 contrib/drivers/pgsql 支持写入操作下的 LastInsertId 特性。
  3. 改进 contrib/drivers/clickhouse 支持 decimal.Decimal 数据类型。
  4. 新增 contrib/drivers/dm 国产达梦数据库 支持: https://github.com/gogf/gf/tree/master/contrib/drivers

注册发现组件

  1. 改进 contrib/registry/etcd 实现,将日志对象改为接口属性,允许外部注册自定义的日志对象。

配置组件

  1. 新增社区组件 contrib/config/kubecm,实现基于 kubernetes configmap 的配置组件 Adapter 实现: https://github.com/gogf/gf/tree/master/contrib/config/kubecm
  2. 新增社区组件 contrib/config/apollo,实现基于 apollo 配置中心的配置组件 Adapter 实现: https://github.com/gogf/gf/tree/master/contrib/config/apollo
  3. 新增社区组件 contrib/config/polaris,实现基于 polaris 配置中心的配置组件 Adapter 实现: https://github.com/gogf/gf/tree/master/contrib/config/polaris

数据库ORM

  1. 统一不同数据库类型下,单行字符串配置管理格式,并兼容支持已有不同数据库类型特定的配置格式: ORM使用配置
  2. 改进接口设计,简化 driver 实现逻辑,后续新增更多的数据库 driver 支持更加简便。
  3. 新增 ToSQL 方法,用于将ORM操作生成可供调试的 SQL 语句,并不真正执行 SQL
  4. 新增 CatchSQL 方法,用于通过闭包方法获取内部执行的 SQL 语句列表。
  5. 废弃 Core 对象中的 GetStruct/GetStructs 方法,统一使用 Scan 方法操作,以提高易用性。
  6. 数据库对象使用日志对象改为接口属性,允许外部注册自定义的日志对象。
  7. 新增 ExtraProtocol 配置,用于设置额外的配置参数以及链接协议,默认通过 Link 配置自动解析。
  8. 去掉 Filtered 接口,采用默认实现,简化复杂度、提高易用性。
  9. 新增 ConvertValueForLocalCheckLocalTypeForField 接口,用于自定义的数据类型转换及数据类型获取,并提供默认实现。
  10. 新增 ClearTableFields 方法,用于清理特定数据表的数据结构缓存: ORM高级特性-字段映射
  11. 新增 ClearTableFieldsAll 方法,用于清理当前数据库对象所有的数据表数据结构缓存: ORM高级特性-字段映射
  12. 新增 ClearCache 方法,用于清理特定数据表的所有查询缓存: ORM链式操作-查询缓存
  13. 新增 ClearCacheAll 方法,用于清理当前数据库对象所有的查询缓存: ORM链式操作-查询缓存
  14. 其他一些改进。

编解码组件

  1. gcompress
  2. 新增 GzipPathWriter 方法没用与将特定路径下的文件压缩到指定的 io.Writer 中。
  3. 新增ZipPathContent方法,用于使用 zip 算法打包压缩文件/目录并返回字节内容。
  4. gjson
  5. ContentTypeJson 等字符串参数调整为 ContentType 类型

错误处理

  1. 增加命令行参数 --gf.gerror.briefGF_GERROR_BRIEF 环境变量开关,控制是否在错误堆栈打印时过滤框架堆栈: 错误处理-其他特性
  2. 其他一些细节改进。

网络组件

  1. ghttp
  2. 新增常用中间件 MiddlewareJsonBody 用于校验请求 Body 是否 JSON 格式。
  3. 新增 GetListenedAddress 方法,用于获取 HTTP Server 在指定 :0 监听端口时系统随机分配的监听地址。
  4. 当服务端执行出错时,修改返回HTTP状态码为 500
  5. gtcp
  6. 新增 GetListenedAddress/GetListenedPort 方法,用于获取 TCP Server 在指定 :0 监听端口时系统随机分配的监听地址/端口。
  7. gudp
  8. 新增 GetListenedAddress/GetListenedPort 方法,用于获取 UDP Server 在指定 :0 监听端口时系统随机分配的监听地址/端口。
  9. goai
  10. 生成接口文档时,支持内嵌结构体定义的属性。
  11. 去掉接口文档中重复的参数说明,特别是在 URLBody 中存在相同参数时。
  12. gtrace
  13. 改进 WithTraceID 方法的错误提示为更明确的信息。
  14. 新增 WithUUID 方法,用于将标准的 UUID 转换为 OpenTelemetryTraceID

系统组件

  1. gcfg
  2. 调整 Available 接口方法定义,将 resource 参数改为非必须参数。
  3. gcron
  4. 针对定时任务延迟的场景,增加时间差异计算逻辑,尽可能减少对定时任务的影响。
  5. gctx
  6. 新增跨进程的链路跟踪支持。
  7. 新增 GetInitCtx/SetInitCtx 方法,用于 main 包及包 init 包初始化方法执行时的 context 获取和设置。
  8. glog
  9. 新增 ILogger 接口定义,用于跨组件使用日志组件时的接口化解耦。
  10. 其他细节改进。
  11. gres
  12. 资源 File 对象新增 Export 方法,用于将该对象关联的资源导出到指定的磁盘路径。
  13. gstructs
  14. RecursiveOptionint 类型改进为自定义类型,并调整对应的方法参数定义。

文本处理

  1. 新增 gstr.IsGNUVersion 方法,用于判断给定的字符串是否满足 GNU 版本规则。

工具方法

  1. gconv
  2. 改进对 NaN 特殊字符串的 int64/uint64 转换支持。
  3. gutil
  4. 新增 GetOrDefaultStr/GetOrDefaultAny 方法,用于默认值和非必须参数的便捷处理。
  5. gvalid
  6. 重构内置校验规则管理器,使得新增一个内置校验非常简便。
  7. 增加并支持到了 59 种常用内置校验规则: 数据校验-校验规则

功能修复

  1. 修复 garray/gmap/gset/glist/gtype/gvar 在容器对象为 nil 场景下 DeepCopypanic 问题。
  2. 修复 gtime 在对象为 nil 场景下 DeepCopypanic 问题。
  3. 修复数据库ORM链式操作 Group 方法在给定多个排序条件时的覆盖问题。
  4. 修复 HTTP ServerJSON 格式字符串返回时的内容重复输出问题。
  5. 修复 gstr.Nl2Br 方法在部分场景下由于逻辑判断引起的数组访问越界问题。
  6. 修复查询数据表字段信息时表名为空场景的错误打印问题。
  7. 修复 Req 对象属性为 *gjson.Json 类型的参数接收问题。

开发工具

  1. 改进 gen dao 命令,增加 clear 参数,用于自动清理目标数据库中不存在的本地数据模型Go文件: 数据规范-gen dao
  2. 改进 gen service 命令: 模块规范-gen service
  3. 按照业务模块对结构体对象生成的接口进行整合。
  4. 增加 clear 参数,用于自动清理在 logic 没有对应的接口代码及文件。
  5. 其他一些细节改进。
  6. 改进 run 命令,增加自定义的程序运行参数。