大家好啊,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组件:
    1. 支持schema参数配置。
    2. 支持time.Time/*time.Time时间类型参数操作。
  2. 改进contrib/drivers/sqlite组件,支持Insert IgnoreSave操作。
  3. 新增contrib/drivers/sqlitecgo组件,通过cgo方式支持i386系统架构。
  4. 改进contrib/nosql/redis组件:
    1. 增加TLSConfig配置,以支持TLS链接Redis Server
    2. 增加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组件:
    1. 客户端支持直接给定链接地址访问服务端。
    2. 完善单测,提高代码质量。

开发工具

  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. 其他一些细节修复。