跳到主要内容
版本:2.8.x(Latest)

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

本次版本最大的看点是提供了 metric 监控组件,主库提供了接口化的 metric 设计,社区组件提供了基于 OpenTelemetrymetric 接口实现。该特性在默认情况下是关闭的,只有在引入具体的接口实现或者社区实现时才会默认启用。当前版本同时提供了 HTTP Client&Server 的监控指标实现,其他组件的监控指标将在后续版本中陆续提供。详情请参考文档: 服务监控告警

同时,在本次版本中实现了对 dm/mssql/oracle/pgsql/sqlite 数据库的 Save 操作支持,感谢社区小伙伴 https://github.com/oldme-git 💖。

此外,值得一提的是,在本次版本中,我们对 gcron 定时任务组件对秒级字段增加了忽略符号 # 的特性,用于将 6 段式的 cron pattern 转换为类似于 5 段式的 linux crontab pattern 功能,用于解决秒级粒度下由于延迟引起的任务执行不准确问题: 定时任务-表达式

由于本次版本变更内容较多,以下中文介绍一些较为重要的改进点,详细的 ChangeLog 请参考: https://github.com/gogf/gf/releases/tag/v2.7.0

完整代码变更请参考:https://github.com/gogf/gf/compare/v2.6.0...v2.7.0

感谢所有参与本次版本的贡献开发者们💖!

组件改进

  1. gdb
    1. 新增 Stats 接口定义及实现,用于获取当前数据库 orm 对象维护的连接池信息: ORM高级特性-连接池状态
    2. 新增 FormatUpsert 接口定义及实现,用于不同数据库类型实现写入/更新操作,即 Save 操作。
    3. 新增 SqlType 类型,并将已有的 sql type 类型定义从 string 类型改为了 SqlType 类型。
    4. 新增 Model.OnConflict 方法,用于实现部分数据库类型当字段唯一键冲突时的更新策略,特别是实现 Save 操作。
    5. 修复 ClearTableFieldsAll 方法失效的问题。
  2. ghttp
    1. 新增 MiddlewareNeverDoneCtx 中间件,开发者可以选择使用,避免客户端取消请求时服务端收到的 context cancel 问题: 常见问题
    2. 新增 http server 的监控指标实现,默认关闭不会影响性能,只有在开启 metrics 特性时才会自动开启: HTTPServer-监控指标
    3. 改进 tracing 记录,将 span 名称从 query uri 改为了 route uri,便于查看时更容易聚合。
    4. 改进 Request 对象中的 EnterTimeLeaveTime 属性类型,从 int64 改为了 *gtime.Time 类型。
    5. WebSocket 方法标记废弃,将会在未来的大版本中去掉,也会去掉 http serverwebsocket 的内嵌耦合支持。未来建议通过其他的 websocket 开源组件结合 http server 一起使用,更加解耦灵活。
    6. 修复由于 Request Body 默认可重复读取的问题引发的大文件上传占用内存问题。
    7. 修复 StartPProfServer 方法的 pattern 参数失效问题。
    8. 文件下载方法 Request.ServeFileDownload 方法新增 Access-Control-Expose-Headers Header 返回,以支持 ajax 文件请求。
    9. 服务配置新增 SwaggerUITemplate 配置项,用于快捷配置 SwaggerUI 页面的 HTML 内容。
    10. http server 启动路由打印时不再打印内置的中间件。
  3. gclient
    1. 修复在开启服务发现的情况下,所有的 http 请求均会强制走服务发现的域名解析问题。
    2. 新增 http client 的监控指标实现,默认关闭不会影响性能,只有在开启 metrics 特性时才会自动开启: HTTPClient-监控指标
  4. gcron
    1. 新增忽略符号 #,对 cron pattern 中的 秒字段 进行占位,表示忽略秒字段,用于将 6 段式的 cron pattern 转换为 5 段式的 linux crontab pattern定时任务-表达式
    2. 修复在确定的秒级任务场景中(例如 2 * * * * *),当底层时间出现不准确时可能引发两次任务执行。
  5. gerror
    1. 修复 gerror.HasCode 方法递归逻辑失效的问题。
  6. g
    1. 改进 DumpJson 方法,用于实现对任意变量按照 JSON 格式进行打印。
  7. gcache
    1. 修复大量创建 Cache 对象引发的 goroutine 过多问题。
  8. gcmd
    1. 新增 RunWithSpecificArgs 方法,用于使用自定义的 arguments 运行命令对象。
    2. 修复部分场景下由于参数结构体名称和结构体标签名称冲突引发的参数丢失问题。
  9. gfsnotify
    1. 修复 gfsnotify 对象关闭时可能引发的 panic 问题。
  10. glog
    1. 修复 rotate 特性对 gz 后缀日志压缩文件的重复 rotate 问题。
  11. gmetric
    1. 新增 gmetric 组件,采用了解耦设计,只有接口定义和 Noop 的实现,真实的实现在社区组件中。只有引入具体的实现才会真实开启 metric 特性: 服务监控告警
  12. gproc
    1. 修复进程参数解析在 windows 下可能失败的问题。
    2. 改进 Signal 信号监听实现,允许在运行时增加信号监听处理方法。
  13. gview
    1. 修复由于 os.Getwd 方法执行失败引起的健壮性问题。
  14. gconv
    1. json.RawMessage 支持接受 slice 类型的参数转换。
    2. 修复 MapDeep 内部转换缺失 Deep 参数引发的递归转换失败问题。
    3. 使用 MapRange 改进内部 Map 遍历逻辑,提高执行性能。

社区组件

  1. 社区 contrib/drivers 数据库组件的改进:
  2. contrib/drivers/dm 组件新增对 Save 操作的支持。
  3. contrib/drivers/mssql 组件新增对 Save 操作的支持。
  4. contrib/drivers/oracle 组件新增对 Save 操作的支持,并修复写入参数不支持 gdb.Raw 类型的问题。
  5. contrib/drivers/pgsql 组件新增对 Save 操作的支持。
  6. contrib/drivers/sqlite 组件新增对 Save 操作的支持。
  7. contrib/drivers/sqlitecgo 组件新增对 Save 操作的支持。
  8. 新增 contrib/metric/otelmetric 组件,实现了对 OpenTelemetry Metric 的支持: 服务监控告警
  9. 改进 contrib/nosql/redis 组件:
  10. 新增 SentinelUsernameSentinelPassword 参数配置,以扩展对 Redis Sentinel 模式的支持: Redis-配置管理
  11. 改进 Redis 接口实现,开发者可以灵活自定义扩展、覆盖社区组件对象 redis.Redis 类型的实现: Redis-接口化设计
  12. 改进 contrib/registry/etcd 组件,允许开发者配置 etcd 链接的校验信息。
  13. 改进 contrib/rpc/grpcx 组件:
  14. 对启用 tracing 特性时,安全截断请求内容。
  15. 新增对 logger 配置项的支持,允许在配置文件中通过 logger 配置项配置 grpc server 的日志对象: 服务端配置
  16. 改进 contrib/trace/otlphttpcontrib/trace/otlpgrpc 组件,修复在短进程场景下正常 ShutDown 仍可能会出现的 trace 数据丢失问题。

开发工具

  1. 改进 gen dao 生成的 entity 源文件,增加 orm 标签,以提高数据库查询结果转换到 entity 对象的效率。
  2. 改进 gen service 命令,修复生成的源码文件中,方法顺序不一致问题。
  3. 改进 build 命令,将生成的二进制文件存放目录 path 参数的默认值从 ./temp 改为了 . 即当前目录,以解决该参数自定义失效的问题。
  4. 改进 init 命令,新增 -module/g 参数,用于在初始化项目时显式指定 go module 名称。
  5. 修复 gen dao 在多个数据库生成配置下,使用 clear 参数时删除已生成的 dao 源文件的问题。
  6. 修复 gen pbentity 命令,使用自定义的 jsonCase 参数无效的问题。
  7. 修复 run 命令的 -w 指定监听目录参数失效的问题。