大家好,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

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

v2.7 2024-04-09 - 图1

组件改进

  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数据库组件的改进:
    1. contrib/drivers/dm组件新增对Save操作的支持。
    2. contrib/drivers/mssql组件新增对Save操作的支持。
    3. contrib/drivers/oracle组件新增对Save操作的支持,并修复写入参数不支持gdb.Raw类型的问题。
    4. contrib/drivers/pgsql组件新增对Save操作的支持。
    5. contrib/drivers/sqlite组件新增对Save操作的支持。
    6. contrib/drivers/sqlitecgo组件新增对Save操作的支持。
  2. 新增contrib/metric/otelmetric组件,实现了对OpenTelemetry Metric的支持:服务监控告警
  3. 改进contrib/nosql/redis组件:
    1. 新增SentinelUsernameSentinelPassword参数配置,以扩展对Redis Sentinel模式的支持:Redis-配置管理
    2. 改进Redis接口实现,开发者可以灵活自定义扩展、覆盖社区组件对象redis.Redis类型的实现:Redis-接口化设计
  4. 改进contrib/registry/etcd组件,允许开发者配置etcd链接的校验信息。
  5. 改进contrib/rpc/grpcx组件:
    1. 对启用tracing特性时,安全截断请求内容。
    2. 新增对logger配置项的支持,允许在配置文件中通过logger配置项配置grpc server的日志对象:服务端配置
  6. 改进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指定监听目录参数失效的问题。