大家好,本次发布的 v2.1
版本包含一些与业务实践相关的功能特性、改进以及Bug Fix,建议大家升级。
视频介绍: 2022-06-22 GoFrame v2.1功能特性&使用答疑
新特性
- 开发工具新增
gen service
命令,支持自动化地根据logic
层级代码,生成service
接口代码、实现注入: 模块规范-gen service - 数据库组件特性:
- 新增
WhereBuilder
特性,用于更加灵活的SQL
条件语句组合: ORM查询-Where/WhereOr/WhereNot - 新增
Hook
特性,用于自定义钩子事件处理: ORM链式操作-Hook特性 - 框架新增
DeepCopy
特性,用于类型的深度拷贝: - 新增
gutil.Copy
方法,用于深度拷贝指定内容。 - 泛型类型新增
Copy
方法,用于深度拷贝自身内容。 - 框架部分数据类型已支持深度拷贝特性,例如:
gvar, garray, gmap
等基础容器类型。
主要改进
社区组件
ORM驱动实现
- 新增
drivers/clickhouse
,用于对接clickhouse
到goframe ORM
组件。 - 完善
clickhouse/mssql/pgsql/sqlite/oracle
组件单元测试。 - 将
mysql
驱动从主库迁移到社区模块,便于将mysql
从主库解耦。因此从后续版本开始,开发者需要手动引入驱动依赖: https://github.com/gogf/gf/tree/master/contrib/drivers
注册发现实现
- 新增
polaris
北极星服务注册接口实现: https://github.com/gogf/gf/tree/master/contrib/registry/polaris - 改进
etcd
服务注册发现接口实现组件: https://github.com/gogf/gf/tree/master/contrib/registry/etcd
注册发现
- 将
Service
实现对象改进为接口定义,并提供默认的Service
实现,提高扩展性和易用性。 - 改进
HTTP/GRPC Client&Server
对接实现。
负载均衡
- 改进
Node
接口定义,新增Nodes
接口定义。 - 修复
HTTP Client
下的服务发现负载均衡问题。
网络组件
gclient
- 改进服务发现实现逻辑。
- 修复客户端关闭错误,引起的连接池无法复用问题。
ghttp
- 改进
Request.GetUrl
方法对URL Schema
获取细节。 - 参数接收支持
UploadFile
属性自动接收。 - 新增接口文档自定义UI指导文档: 接口文档-自定义UI
- 接口文档默认依赖的外部
JS CDN
改为unpkg.com
。 - 改进服务注册实现逻辑。
- 改进内部细节实现逻辑。
- 修复参数为空判断问题。
goai
- 改进更规范化符合
OpenAPIV3
协议实现。 - 支持所有
x-
开头的自定义标签,自动添加OpenAPIV3
的结果中。 - 组件从
protocol
分类迁移到了net
分类下,import
路径发生改变。
系统组件
gcfg
- 默认的文件系统接口实现新增对
property
文件格式的支持。 gcmd
- 参数解析新增
CaseSensitive
配置,默认不区分大小写解析,特别针对结构化参数接收影响较大: 命令管理-结构化参数 - 新增跨进程的链路跟踪特性: 命令管理-链路跟踪
glog
- 新增全局的
Handler
设置功能,开发者可以全局自定义处理glog
组件的所有日志,例如全局输出JSON
文件格式: 日志组件-Handler - 新增默认的
JSON
格式Handler
供开发者使用: 日志组件-Handler gsession
- 解决当访问用户过多造成的内存占用过大的问题。
gproc
- 新增跨进程的链路跟踪特性: 进程管理-链路跟踪
容器组件
garray
- 改进
Unique
方法性能,增加DeepCopy
接口实现。 glist
- 增加
DeepCopy
接口实现。 gmap
- 增加
DeepCopy
接口实现。 gset
- 增加
DeepCopy
接口实现。 gtype
- 增加
DeepCopy
接口实现。 gvar
- 增加
Copy
方法,用于深度拷贝当前泛型对象。 - 增加
DeepCopy
接口实现。
数据库组件
gdb
- 新增
WhereBuilder
特性,用于更加灵活的SQL
条件语句组合: ORM查询-Where/WhereOr/WhereNot - 新增
HOOK
特性,用于自定义钩子事件处理: ORM链式操作-Hook特性 - 改进数据提交到底层
driver
前的数据转换处理逻辑。 - 将
mysql
驱动从主库迁移到社区模块,便于将mysql
从主库解耦。因此从后续版本开始,开发者需要手动引入驱动依赖: https://github.com/gogf/gf/tree/master/contrib/drivers
编解码组件
gproperty
- 新增
gproperty
组件,用于解析Java Property
格式文件。 gjson
- 新增对
property
文件格式的编解码、数据操作支持: 通用编解码-gjson - 修复对大整形数据读取的精度丢失问题。
文本处理
gstr
- 改进
WordWrap
方法,使得对Unicode
特别是中文换行更加友好。 - 修复
RepliceI
忽略大小写字符串替换在特定场景下的问题。
错误处理
gerror
- 新增
Unwrap
方法(同Next
方法),用以支持Golang
新版本的Unwrap
错误接口。 - 新增
Equal
方法,用于判断两个错误是否相等: 错误处理-错误比较 - 新增
Is
方法,用于支持Golang
新版本的Is
错误接口: 错误处理-错误比较
工具方法
gconv
- 去掉整型转换时对八进制字符串的支持。
- 改进内部实现逻辑,提高可读性保障可维护性。
gutil
- 新增
gutil.Copy
方法,用于深度拷贝指定内容。 - 改进
gutil.Dump
方法。
开发工具
相对于主库稳定的代码组件,CLI开发工具在近期的版本发布有一些非兼容更新,各位在升级时注意发布记录,细节请查看源码调整。
- 改进
build
命令,支持指定pack
代码文件的生成目录,参数有个别调整。 - 改进
docker
命令,支持多个docker tag
的重命名及仓库自动推送。 - 改进
gen dao
命令,支持自定义dao/do/entity
代码生成目录,不再强制生成到service/internal
目录下: 数据规范-gen dao - 新增
gen service
命令,支持自动化地根据logic
层级代码,生成service
接口代码: 模块规范-gen service - 修复
run
命令自定义程序启动参数问题、gofmt/goimports
程序路径带空格问题。
不兼容事项
- 将
mysql
驱动从主库迁移到社区模块,便于将mysql
从主库解耦。因此从后续版本开始,开发者需要手动引入驱动依赖: https://github.com/gogf/gf/tree/master/contrib/drivers ghttp.Response.WriteJson/Xml
等方法不再返回error
。根据编译错误调整即可。goai
组件从protocol
分类迁移到了net
分类下,import
路径发生改变。根据编译错误调整即可。- 数据库
ORM
操作参数中带有gtime.Time
类型,为了解决时间精度丢失的问题,将会自动转换为time.Time
类型再提交给底层的数据库driver
。也就是说,gtime.Time
类型参数也会受到数据库配置的时区配置参数影响。具体请参考: ORM时区处理