大家好啊!本次版本是2022年最后一个版本,也是2023年的第一个版本。该版本主要的目标:
- 采用接口化设计解决了主框架对第三方开源组件
go-redis耦合的问题,使得主框架更加轻量,对工具化使用框架的场景更加友好。 - 通过开发工具提供升级 主框架、社区组件、开发工具 的命令,提高框架整体易用性,并解决常见的社区组件与主框架版本不一致问题。
- 进一步按照接口与实现分离设计,通过社区组件方式,完善注册发现、配置管理对常用服务的对接,为下一步发布微服务组件做准备。
新特性
- 将耦合较重的
redis组件从主框架中解耦,作为社区组件提供。原有主框架增加redis接口定义,社区组件redis提供具体的接口实现。因此,请注意,主框架gredis组件的使用方式发生了一些变更,在依赖redis的项目中需要引入社区组件redis实现,否则方法执行将会返回错误。保留兼容原有基础的Do/DoVar方法,并增加了100+项常用redis操作方法:NoSQL Redis - 配置管理及注册发现组件新增常用服务接口实现:
- 配置管理(
nacos):https://github.com/gogf/gf/tree/master/contrib/config/nacos - 注册发现(
zookeeper):https://github.com/gogf/gf/tree/master/contrib/registry/zookeeper
- 配置管理(
- 新增工具命令
gf up,用于便捷的框架升级操作,具体介绍请查看:框架升级-up
功能改进
社区组件
配置管理
- 新增
nacos接口实现:https://github.com/gogf/gf/tree/master/contrib/config/nacos
注册发现
- 新增
zookeeper接口实现:https://github.com/gogf/gf/tree/master/contrib/registry/zookeeper
数据库驱动
- 修复
clickhouse在配置Charset参数时的报错问题。 - 改进
clickhouse获取数据表结构结果,返回的Index顺序统一从0开始。 - 改进
oracle表结构获取SQL,以支持float64数据类型。 - 修复
pgsql对接口CheckLocalTypeForField的实现,名称被错误定义为了CheckLocalTypeForValue,造成生成dao代码文件时的属性字段类型错误。 - 改进
pgsql增加对schema的支持,由于shcema在大部分数据库服务中代表"数据库名称",并且也为了兼容旧版本,因此增加Namespace配置参数用以表示pgsql的Schema,而原有的Schema对象代表pgsql的catalog。
NoSQL组件
- 新增
redis社区组件,实现gredis相关接口:https://github.com/gogf/gf/tree/master/contrib/nosql/redis
数据库组件
gdb- 为提高扩展性,
TX事务对象改为了接口定义,原有的TX对象改为了TXCore方便自定义接口实现对象的嵌套:ORM事务处理 - 增加
Namespce配置项,用以支持个别数据库服务Catalog&Schema区分的问题,原有的Schema继续代表数据库名称,而新增的NameSpace代表个别数据库服务的Schema配置:ORM使用配置 - 改进数据库名称配置,增加对中文数据库名称的支持。
- 执行
SQL日志中增加当前执行的数据库名称打印。 - 修复
Count方法的缓存问题。
- 为提高扩展性,
gredis- 新增
redis社区组件,将耦合较重的redis组件从主框架中解耦,作为社区组件提供。原有主框架增加redis接口定义,而社区组件redis提供具体的接口实现。因此,请注意,主框架gredis组件的使用方式发生了一些变更,在依赖redis的项目中需要引入社区组件redis实现,否则方法执行将会返回错误。保留兼容原有的Do/DoVar方法,并增加了100+项常用redis操作方法:NoSQL Redis
- 新增
容器组件
gpool- 增加
MustPut方法,在Put执行出错时直接panic而不是返回错误对象
- 增加
gqueue- 改进
Len/Size方法,解决可能存在的队列计数不准确问题。 - 改进
Len/Size方法,返回参数类型由int改为int64。
- 改进
错误处理
gcode- 增加
CodeNecessaryPackageNotImport错误码。
- 增加
gerror- 改进堆栈打印,统一使用空格替代
\t,以保证打印格式兼容不同的展示终端。
- 改进堆栈打印,统一使用空格替代
对象管理
gins- 单例对象增加分组锁机制,提升在高并发下的锁机制性能。
网络组件
ghttp- 支持在中间件中增加对当前执行路由方法的获取。
- 当路由方法执行的结果不为
200时,支持在中间件中通过Request.GetError方法获取内部错误。 - 新增
Response.ServeContent方法,用于自定义的内容输出接口实现。 - 改进反向代理支持,并增加反向代理示例:https://github.com/gogf/gf/blob/master/example/httpserver/proxy/main.go
- 改进错误日志输出,使用
error错误级别,便于开发者在自定义日志Handler中识别日志类型。
goai- 新增对
security标签的支持,用以配置OpenAPIv3安全密钥。 - 改进对带有
json标签带有,符号时结构体属性的名称获取。
- 新增对
gtcpSetSendDeadline方法名称修改为SetDeadlineSend。SetReceiveDeadline方法名称修改为SetDeadlineRecv。SetReceiveBufferWait方法名称修改为SetBufferWaitRecv。
gudpSetSendDeadline方法名称修改为SetDeadlineSend。SetReceiveDeadline方法名称修改为SetDeadlineRecv。SetReceiveBufferWait方法名称修改为SetBufferWaitRecv。
系统组件
gcache- 修复
MustGetOrSetFunc方法逻辑问题。 - 改进
LRU缓存过期回收机制实现。
- 修复
gcmd- 改进结构化命令行对象生成,当
brief标签为空时,自动读取dc标签内容作为brief,以保证命令行与接口定义标签习惯相同。
- 改进结构化命令行对象生成,当
gcron- 改进日志处理,当给定的定时任务方法执行
panic并且开发者没有设置Logger接口时,将会使用glog.DefaultLogger输出错误日志。 - 改进定时触发判断逻辑,解决在底层定时器执行间隔不准确时引起的定时任务触发问题。
- 改进日志处理,当给定的定时任务方法执行
glog- 改进在滚动切分特性开启时的初始化逻辑,解决在个别场景下的初始化失败导致滚动切分执行失败问题。
- 改进
Clone方法,进一步浅拷贝提高链式操作性能。 - 新增
LevelPrint配置,用以控制默认日志Handler是否打印日志级别字符串。
gres- 新增
Pack*WithOption方法,用以提供更细致的资源打包选项控制。 - 标记方法废弃:
Pack/PackToFile/PackToGoFile。 - 新增
KeepPath打包选项,用以控制是否在打包文件中保留给定的相对路径,而不是使用带有本地打包目录前缀的路径(相当于去掉了目录前缀)。
- 新增
grpool- 新增
supervisor特性,解决在worker数量较少的场景下,低概率下同时退出的问题。
- 新增
gstructs- 新增
Tag*方法,用以获取常见的标签值。
- 新增
gtime- 改进
Equal/After/Sub方法,解决在个别场景下的细节问题。 - 改进
EndOf*方法,返回的时间对象由开发者控制EndOf计算的粒度。调整默认粒度,由纳秒改为秒粒度进行计算。 - 改进
SetTimeZone时区设置方法,以实现不同系统下的兼容性,该方法只允许全局设置一次时区,多次调用设置不同时区将会返回错误:时间管理-时区设置
- 改进
文本处理
gstr- 修复
IsSubDomain判断主域名为子域名的子域名问题。 - 改进
SubStr/SubStrRune方法,支持以负数的start参数指定从右截取字符串。
- 修复
工具组件
gconv- 新增
Ptr*方法,用以任意类型到指定类型指针变量的转换。 - 改进
Map*转换方法对递归转换的处理,默认只会递归转换嵌套的结构体属性。 - 改进
Scan方法,解决属性同类型以及同类型指针到目标对象/指针的转换问题。
- 新增
gtag- 将框架中所有的标签名称统一到该模块下通过常量维护。
- 增加
SetOver/SetsOver方法,用于覆盖设置自定义的标签键值对。
gutil- 改进
Dump*方法,支持循环嵌套的对象指针打印。 - 修复
Dump*方法在部分场景下的反射报错问题。 - 新增
OriginValueAndKind/OriginTypeAndKind方法,用于获取给定变量的反射值/类型对象,以及在指针变量下对应的原始反射值/类型对象。
- 改进
功能修复
- 修复工具在部分环境下安装失败问题。
- 修复
New*ArrayRange方法创建数组对象时,在部分场景下数组越界问题。 - 修复
contrib/drivers/clickhouse在配置Charset参数时的报错问题。 - 修复
pgsql数据库生成dao代码文件时的属性字段类型错误问题。 - 修复数据库ORM组件中
Count方法的缓存问题。 - 修复
gstr.IsSubDomain判断主域名为子域名的子域名问题。 - 修复
gutil.Dump*方法在部分场景下的反射报错问题。
开发工具
- 增加
gf fix命令,用于低版本升级高版本自动更新本地代码不兼容变更:兼容修复-fix - 增加
gf up命令,用以将本地的框架低版本升级到最新的框架版本:框架升级-up - 改进
gf build命令,在构建之前增加环境变量信息打印。 - 改进
gf pack命令,增加KeepPath参数,用以控制资源打包后是否保留相对路径:资源打包-pack - 改进
gf gen dao命令,生成的Transaction方法中tx参数从对象指针改为了接口。
兼容提示
Redis的使用方式发生变更,旧版方法保持兼容,但需要额外添加社区组件的引入(接口与实现分离),具体请查看文档。- 数据库
ORM的TX对象从具体实现改为了接口,这块通过开发工具新增的up或者fix命令即可自动升级修复。
下一版本目标
- 完善并发布
grpcx社区组件,实现对grpc接口协议的扩展支持,并提高微服务开发易用性。 - 官网新增【微服务开发】系列章节,主要以
grpc开发为主介绍使用goframe进行微服务开发。 - 主框架去掉对第三方开源组件
gorilla/websocket的耦合,将WebSocket的支持接口化,按照框架的通用解耦设计,通过社区组件提供具体实现,提供扩展性和灵活性。




还没有评论,来说两句吧...