大家好啊!本次版本是2022
年最后一个版本,也是2023
年的第一个版本。该版本主要的目标:
go-redis
耦合的问题,使得主框架更加轻量,对工具化使用框架的场景更加友好。完整变更列表:https://github.com/gogf/gf/compare/v2.2.0...v2.3.1
redis
组件从主框架中解耦,作为社区组件提供。原有主框架增加redis
接口定义,社区组件redis
提供具体的接口实现。因此,请注意,主框架gredis
组件的使用方式发生了一些变更,在依赖redis
的项目中需要引入社区组件redis
实现,否则方法执行将会返回错误。保留兼容原有基础的Do/DoVar
方法,并增加了100+
项常用redis
操作方法:NoSQL Redisgf up
,用于便捷的框架升级操作,具体介绍请查看:框架升级-upclickhouse
在配置Charset
参数时的报错问题。clickhouse
获取数据表结构结果,返回的Index
顺序统一从0
开始。oracle
表结构获取SQL,以支持float64
数据类型。pgsql
对接口CheckLocalTypeForField
的实现,名称被错误定义为了CheckLocalTypeForValue
,造成生成dao
代码文件时的属性字段类型错误。pgsql
增加对schema
的支持,由于shcema
在大部分数据库服务中代表"数据库名称",并且也为了兼容旧版本,因此增加Namespace
配置参数用以表示pgsql
的Schema
,而原有的Schema
对象代表pgsql
的catalog
。redis
社区组件,实现gredis
相关接口:https://github.com/gogf/gf/tree/master/contrib/nosql/redisgdb
gredis
redis
社区组件,将耦合较重的redis
组件从主框架中解耦,作为社区组件提供。原有主框架增加redis
接口定义,而社区组件redis
提供具体的接口实现。因此,请注意,主框架gredis
组件的使用方式发生了一些变更,在依赖redis
的项目中需要引入社区组件redis
实现,否则方法执行将会返回错误。保留兼容原有的Do/DoVar
方法,并增加了100+
项常用redis
操作方法:NoSQL Redisgpool
MustPut
方法,在Put
执行出错时直接panic
而不是返回错误对象gqueue
Len/Size
方法,解决可能存在的队列计数不准确问题。Len/Size
方法,返回参数类型由int
改为int64
。gcode
CodeNecessaryPackageNotImport
错误码。gerror
\t
,以保证打印格式兼容不同的展示终端。gins
ghttp
200
时,支持在中间件中通过Request.GetError
方法获取内部错误。Response.ServeContent
方法,用于自定义的内容输出接口实现。error
错误级别,便于开发者在自定义日志Handler
中识别日志类型。goai
security
标签的支持,用以配置OpenAPIv3
安全密钥。json
标签带有,
符号时结构体属性的名称获取。gtcp
SetSendDeadline
方法名称修改为SetDeadlineSend
。SetReceiveDeadline
方法名称修改为SetDeadlineRecv
。SetReceiveBufferWait
方法名称修改为SetBufferWaitRecv
。gudp
SetSendDeadline
方法名称修改为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
代码文件时的属性字段类型错误问题。Count
方法的缓存问题。gstr.IsSubDomain
判断主域名为子域名的子域名问题。gutil.Dump*
方法在部分场景下的反射报错问题。gf fix
命令,用于低版本升级高版本自动更新本地代码不兼容变更:兼容修复-fixgf up
命令,用以将本地的框架低版本升级到最新的框架版本:框架升级-upgf build
命令,在构建之前增加环境变量信息打印。gf pack
命令,增加KeepPath
参数,用以控制资源打包后是否保留相对路径:资源打包-packgf gen dao
命令,生成的Transaction
方法中tx
参数从对象指针改为了接口。Redis
的使用方式发生变更,旧版方法保持兼容,但需要额外添加社区组件的引入(接口与实现分离),具体请查看文档。ORM
的TX
对象从具体实现改为了接口,这块通过开发工具新增的up
或者fix
命令即可自动升级修复。grpcx
社区组件,实现对grpc
接口协议的扩展支持,并提高微服务开发易用性。grpc
开发为主介绍使用goframe
进行微服务开发。gorilla/websocket
的耦合,将WebSocket
的支持接口化,按照框架的通用解耦设计,通过社区组件提供具体实现,提供扩展性和灵活性。