您的位置:首页 > IT > 正文

GoFrame v2.3 发布,企业级 Golang 开发框架

来源:开源中国     时间:2023-01-18 14:23:32


(相关资料图)

大家好啊!本次版本是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配置参数用以表示pgsqlSchema,而原有的Schema对象代表pgsqlcatalog

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方法名称修改为SetDeadlineSendSetReceiveDeadline方法名称修改为SetDeadlineRecvSetReceiveBufferWait方法名称修改为SetBufferWaitRecvgudpSetSendDeadline方法名称修改为SetDeadlineSendSetReceiveDeadline方法名称修改为SetDeadlineRecvSetReceiveBufferWait方法名称修改为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的使用方式发生变更,旧版方法保持兼容,但需要额外添加社区组件的引入(接口与实现分离),具体请查看文档。 数据库ORMTX对象从具体实现改为了接口,这块通过开发工具新增的up或者fix命令即可自动升级修复。

下一版本目标

完善并发布grpcx社区组件,实现对grpc接口协议的扩展支持,并提高微服务开发易用性。 官网新增【微服务开发】系列章节,主要以grpc开发为主介绍使用goframe进行微服务开发。 主框架去掉对第三方开源组件gorilla/websocket的耦合,将WebSocket的支持接口化,按照框架的通用解耦设计,通过社区组件提供具体实现,提供扩展性和灵活性。

相关文章