主要内容
GoFrame v2.9
版本带来了多项重要特性和改进,包括ORM
分库分表、事务传播&隔离级别控制、OpenAPIv3.1
支持、gzip
中间件以及全新的Converter
类型转换接口等。这些新特性将大幅提升框架的性能、可扩展性和开发体验。
以下为本次版本的主要内容,详细的Change Log
请参考:
https://github.com/gogf/gf/releases/tag/v2.9.0
完整的代码变更请参考:https://github.com/gogf/gf/compare/v2.8.0...v2.9.0
特别致谢
💖💖💖 感谢所有参与本次版本贡献的开发者们 💖💖💖
兼容提示
-
框架依赖的最低
Go
版本从1.20
升级到了1.22
,以充分利用最新的语言特性、运行时优化和安全增强,显著提升应用性能和稳定性。 -
net/client
- 在全局的服务注册发现组件开启时,该组件创建的
HTTP Client
对象不再默认启用服务发现功能,需要手动开启。
- 在全局的服务注册发现组件开启时,该组件创建的
-
os/glog
- 日志默认时间打印格式调整为更严谨的
2006-01-02T15:04:05.000Z07:00
。
- 日志默认时间打印格式调整为更严谨的
组件改进
-
database/gdb
- 新增
ORM
分库分表特性,支持水平分表和垂直分库,大幅提升大规模数据处理能力:ORM分库分表 - 新增
ORM
事务传播特性,支持类似Spring
的事务传播行为,提供更灵活的事务管理:ORM事务处理-事务传播 - 新增
ORM
事务隔离级别,支持标准SQL事务隔离级别设置:ORM事务处理-隔离级别 - 新增
ORM
事务只读模式,优化只读事务性能:ORM事务处理-只读模式 - 新增
WhereExists/WhereNotExists
方法支持,增强子查询能力:ORM查询-Where条件 - 新增对
unix socket
数据库链接配置的支持,提供更多连接选项。 - 修复在
OnDuplicate
方法中使用gdb.Counter
类型失效问题:ORM链式操作-写入保存 - 修复当用户增加
Select Hook
并修改返回结构后,部分场景下导致Count/Value/Array
查询结构异常问题。 - 修复在使用
with
特性时,数据结构中embedded struct
的元数据标签中的orm
标签失效问题。 - 修复
tinyint(1)/int(1)
类型识别为bool
类型与旧版本不兼容的问题。 - 修复
database/gdb
组件中Order("id", "desc")
语句与旧版本不兼容的问题。 - 优化
ORM
查询性能和内存使用效率。
- 新增
-
net/ghttp
- 新增常用中间件
MiddlewareGzip
支持,用于使用gzip
算法压缩返回结果,提高传输效率和性能。 - 新增
HandlerItemParsed.GetMetaTag
方法,用于通过GetServeHandler
获取当前路由执行方法后,通过GetMetaTag
方法获取接口定义的元数据信息,增强路由元数据管理能力。 - 去掉规范路由注册时对
api
定义时输入输出数据结构的*Req/*Res
命名规则限制,支持更灵活的命名方式。 - 修复接口参数默认值设置在提交空参数(空字符串或
0
)也生效,造成与文档描述不符的问题。 - 修复跨域返回
Header
中自动从Referer
生成Origin
逻辑不严谨的问题,增强CORS
安全性。 - 修复
BuildParams
方法构建请求参数时针对json omitempty
标签失效问题。 - 修复
Logger
设置为nil
时会引发的空指针panic
问题,提高组件稳定性。
- 新增常用中间件
-
util/gconv
- 新增
Converter
转换接口特性,支持更灵活、易扩展的类型转换能力,提供自定义类型转换注册机制:类型转换-Converter - 新增自定义类型转换支持,允许开发者注册自定义类型转换函数:类型转换-自定义类型转换
- 改进
Scan
方法,增加Scan
到基础数据类型的转换支持:类型转换-Scan转换 - 优化类型转换性能,提高大数据量转换效率。
- 新增
-
net/goai
- 支持最新的
OpenAPIv3.1
协议规范,与主流API文档工具保持兼容。 - 新增返回数据结构扩展能力,支持更灵活的响应定义:接口文档-扩展Response
- 新增自动识别数据校验规则
min/max/length/min-length/max-length/between
为OpenAPIv3
中对应的校验数据结构,简化文档生成:接口文档-OpenAPIv3 - 修复参数数据结构中
embedded struct
数据结构无法扩展为参数结构的问题,提高复杂数据结构支持。 - 优化文档生成性能和内存占用。
- 支持最新的
-
net/client
- 在全局的服务注册发现组件开启时,该组件创建的
HTTP Client
对象不再默认启用服务发现功能,需要手动开启:服务注册发现
- 在全局的服务注册发现组件开启时,该组件创建的
-
os/gcache
- 修复组件中
Remove
方法返回的数据类型与旧版本不兼容的问题。
- 修复组件中
-
errors/gerror
- 新增
As
方法支持,与标准库保持兼容:错误处理-错误比较
- 新增
-
utils/gvalid
- 修复
enums
参数使用指针时enums
校验失效的问题。 - 修复参数校验中如果参数是大量的二进制内容
[]byte
,引发的内存占用过高问题。
- 修复
-
os/glog
- 日志默认时间打印格式调整为更严谨的
2006-01-02T15:04:05.000Z07:00
。
- 日志默认时间打印格式调整为更严谨的
-
os/gsession
- 新增
RegenerateId/MustRegenerateId
方法支持,用以手动重新生成Session ID
,防止会话固定攻击:Session-RegenerateId
- 新增
-
os/gview
- 修复个别场景下从资源管理器中读取模板文件失败的问题。
-
os/gcmd
- 命令行的参数默认值支持输出到命令帮助界。
-
net/gipv4
- 改进
ip
地址和uint32
相互转换实现逻辑。
- 改进
-
test/gtest
- 改进
AssertNI/AssertIN
方法,增加map
类型支持:单元测试-gtest
- 改进
社区组件
-
contrib/drivers/pgsql
- 增加对
pgsql
数组字段类型varchar[]/text[]
的转换支持,自动转换为Go[]string
类型。 - 改进数组类型转换性能。
- 增加对
-
contrib/config/polaris
- 新增更多的数据格式内容支持,支持
yaml/toml/json/xml/ini/properties
等格式。
- 新增更多的数据格式内容支持,支持
-
contrib/registry/consul
- 新增
consul
服务注册发现组件支持:https://github.com/gogf/gf/tree/master/contrib/registry/consul
- 新增
-
contrib/registry/etcd
- 新增重试机制,解决
lease
租约过期时的重续问题。 - 删除默认的
AutoSyncInterval
配置项,解决个别场景下由该默认配置引发的etcd
阻塞问题。
- 新增重试机制,解决
-
contrib/registry/zookeeper
- 修复组件中带有额外后缀
-
的服务名称路径监听错误。
- 修复组件中带有额外后缀
-
contrib/config/nacos
- 新增
OnChange
回调配置支持。
- 新增
-
contrib/metric/otelmetric
- 新增
WithExemplarFilter
选项支持。
- 新增
开发工具
- 改进
gf init
命令,初始化项目的模板内容发生了改变,目录结构无变化。 - 改进
gf up
命令,在终端中展示更优雅的cli
文件下载界面效果,提升用户体验。 - 改进
gf gen ctrl
命令,api
中定义的注释将会自动同步到生成的控制器代码中,减少重复工作。 - 改进
gf gen dao
命令:- 新增分表选项参数
shardingPattern/sp
,用于定义分表规则,生成支持分库的dao
代码,配合ORM分库分表特性:数据规范-gen dao - 改进代码生成模板,支持
Golang Template
语法,提供更灵活的代码生成能力。 - 优化生成代码的质量和可读性。
- 新增分表选项参数
- 改进
gf gen enums
命令:- 修改默认读取的接口数据结构定义目录为
api
,更符合项目规范。 - 修改默认生成代码文件路径为
internal/packed/packed_enums.go
,优化代码组织。
- 修改默认读取的接口数据结构定义目录为
- 改进
gf gen genpbentity
命令:- 增加
TypeMapping
和FieldMapping
特性支持,提供更灵活的类型映射:数据表PB-gen pbentity - 增加
TablesEx
支持,用于生成proto
文件时可以忽略指定的表,提高灵活性。 - 增加
GoPackage
选项用于指定生成proto
文件中的go_package
配置项,更好地支持模块化。
- 增加
- 修复
gf build
命令在打印环境变量时不准确的问题,应当打印修改环境变量后,在编译文件时,真实使用的环境变量。 - 修复
gf gen pb
命令在部分场景下使用-a
选项时,多次执行命令后,自定义标签重复添加的问题。 - 修复
cmd/gf
组件中make
命令在项目模板中生成的Makefile
文件中的命令不正确的问题。 - 整体提升命令行工具的稳定性和用户体验。