大家好啊, GoFrame 框架今天发布了 v2.6.0 正式版本啦!👏👏👏👏

本次版本主要是大量的代码改进和 BugFix 工作。由于本次版本变更内容较多,以下中文介绍一些较为重要的改进点,详细的 ChangeLog 请参考(特别是 BugFix): https://github.com/gogf/gf/releases/tag/v2.6.0

完整代码变更:https://github.com/gogf/gf/compare/v2.5.0…v2.6.0

感谢本次所有的贡献开发者:

v2.6 2023-12-19 - 图1

功能改进

框架最低依赖的 Golang 版本从 v1.15 升级到 v1.18

  1. g
    1. 新增 g.Go方 法,用于便捷创建带有 ctxrecover 参数的异步 goroutine
  2. glog
    1. 改进 Handler 回调处理函数的 HandlerInput 输入参数,增加 Values 参数,该参数为日志打印时的输入参数列表: 日志组件-Handler
    2. 新增 HandlerStructure 通用组件方法,将日志打印内容按照结构化参数打印: 日志组件-Handler
    3. 改进日志文件 rotate 逻辑,解决在个别场景下文件无法 rotate 的问题。
  3. gerror
    1. 增加错误堆栈模式( brief/detail):在 brief 模式下,错误堆栈仅会打印非框架组件堆栈。在 detail 模式下,错误堆栈会打印完整的框架代码调用链路。框架默认使用 brief 模式: 错误处理-其他特性
  4. gcode
    1. 新增 gcode.CodeInternalPanic 错误码,框架组件捕获的所有 panic 错误将会以此错误码返回。
  5. gmap
    1. 新增 Diff 方法,用于对比并返回两个 Map 的差异。
  6. gaes
    1. 新增 PKCS7Padding/PKCS7UnPadding 方法。
  7. gdb
    1. 删除 ConvertDataForRecord 转换方法,新增 ConvertValueForField 转换方法。
    2. 修改 CheckLocalTypeForField 方法,返回参数类型 string 修改为 LocalType 类型。
    3. 这两个主要是数据库实现会用到,通常在社区组件中使用。如果使用者本地有 gdb.DB 接口的实现需要注意这个改动。
    4. 新增 Model.Partition 方法,允许数据库操作时用户显式指定分区参数。
    5. 新增 Model.LeftJoinOnFields/RightJoinOnFields/InnerJoinOnFields 方法,用于更便捷实现 Join 关联操作。
    6. 修复 Model.WherePrefixNotIn 方法实现问题。
  8. gredis
    1. 新增 Cluster 配置项,用于指定是否使用集群模式: Redis-配置管理
    2. 新增 Protocol 配置项,用于指定 RESP 版本: Redis-配置管理
  9. gi18n
    1. 改进转译文件读取逻辑,支持从资源管理器中自动读取文件: I18N国际化-配置管理
  10. gclient
    1. 新增 NoUrlEncode 特性,设置 GET 请求不自动对参数做 UrlEncode 编码。
  11. ghttp
    1. 改进退出信号处理,支持 windows 平台下的退出信号捕获后优雅退出。
  12. goai
    1. 支持自动识别 ghttp.UploadFile 类型为 OpenAPIv3File 类型。
    2. 去掉 Path 对象上与 Method 对象上重复的描述信息。
    3. 接口示例的字段类型按照参数数据类型自动转换为对应的数据类型。
  13. gcfg
    1. 新增 AdapterContent 配置接口实现,使用具体的配置内容来实现配置管理对象: 配置管理-AdapterContent
  14. gctx
    1. 新增 NeverDone 方法,用于包裹给定的 ctx 对象并返回一个永不会过期和 Cancelctx 对象。
  15. gfile
    1. 默认创建的文件模式从 0777 改为了 0755
    2. 改进 Copy/CopyFile/CopyDir 方法,增加 CopyOption 可选参数,用于控制复制逻辑的可选项。
  16. gmutex
    1. 使用 Golang 新版本的 mutex 改进 gmutex.Mutex 对象,直接使用新版本标准库的 TryLock/TryRLock,不再自行实现这些重复的方法。保留 LockFunc/TryLockFunc 方法。
    2. 新增 gmutex.RWMutex 对象,扩展自标准库的 sync.RWMutex 对象,扩展新增了 LockFunc/TryLockFunc、RLockFunc/TryRLockFunc 方法。
  17. gstr
    1. 新增 List2/ListAndTrim2/List3/ListAndTrim3 方法,实现类似于 PHP list 方法特性,将字符串拆分后作为多个结果值返回。
    2. 新增 CaseConvert 方法,用于按照给定的 CaseType 类型参数执行字符串命名格式转换。
  18. gconv
    1. 新增 ConvertWithRefer 方法,用于给定参数作为类型参考,并转换给定参数为指定参数的类型。
  19. gutil
    1. 新增 FillStructWithDefault 方法,用于自动通过读取 struct tag 读取默认值并填充给定的 struct 对象/指针。
  20. gvalid
    1. 修复 enums 校验规则不支持 map 参数类型的问题。

社区组件

配置管理

  1. 新增 contrib/config/consul 组件,用于配置管理组件接口的 consul 服务实现: https://github.com/gogf/gf/tree/master/contrib/config/consul

数据库实现

  1. 改进 contrib/drivers/dm 组件:
  2. 支持 schema 参数配置。
  3. 支持 time.Time/*time.Time 时间类型参数操作。
  4. 改进 contrib/drivers/sqlite 组件,支持 Insert IgnoreSave 操作。
  5. 新增 contrib/drivers/sqlitecgo 组件,通过 cgo 方式支持 i386 系统架构。
  6. 改进 contrib/nosql/redis 组件:
  7. 增加 TLSConfig 配置,以支持 TLS 链接 Redis Server
  8. 增加 Protocol 配置项,以支持最新版本的 Redis Server

服务注册发现

  1. 新增 contrib/registry/nacos 组件,使用 nacos 实现微服务的注册发现: https://github.com/gogf/gf/tree/master/contrib/registry/nacos
  2. 改进 contrib/registry/file 组件,自动删除过期的注册项,避免客户端发现并连接过期的服务端地址。
  3. 修复 contrib/registry/polaris 组件部分实现问题。

微服务组件

  1. 改进 contrib/rpc/grpcx 组件:
  2. 客户端支持直接给定链接地址访问服务端。
  3. 完善单测,提高代码质量。

开发工具

  1. 改进 cli 工具安装方式,额外支持 go install 安装方式: go install github.com/gogf/gf/cmd/gf/v2@latest
  2. 改进 gf run 命令,新增 WatchPaths/-w 配置,支持指定监听的路径列表,避免默认监听本地项目所有项目文件引发 too many opened files 问题: 自动编译-run
  3. 改进 gf gen ctrl 命令,新增 Merge/-m 选项,用以控制生成的控制器代码文件按照 api 层的文件生成,而不是默认按照 api 接口拆分为不同的接口实现文件: 接口规范-gen ctrl
  4. 改进 gf gen dao 命令,新增 RemoveFieldPrefix/-rf 选项,用于自动去掉生成表字段的名称前缀: 数据规范-gen dao
  5. 改进 gf gen pbentity 命令,新增 RemoveFieldPrefix/-rf 选项,用于自动去掉生成表字段的名称前缀: 数据表PB-gen pbentity
  6. 改进 gf gen service 命令,支持自动识别 logic 模块对象的方法注释生成到 service 接口文件中。
  7. 改进 gf version/gf -v 命令,更详细的工具版本、运行环境、框架版本信息。
  8. 改进开发工具的初始化效率,去掉影响初始化效率的 init 包方法逻辑。
  9. 修复 gf gen dao 命令中指定 Link 数据库配置失效的问题。
  10. 其他一些细节修复。