大家好啊, GoFrame
框架今天发布了 v2.4.0
正式版本啦!👏👏👏👏
该版本最大的亮点在于提供了 微服务开发的功能特性、开发工具以及工程脚手架,并且提供了完善的 微服务开发文档!!微服务的组件设计仍然以接口设计为主,以保证良好的灵活性和扩展性,接口维护在框架主库中;具体的接口实现仍然以务实为主,并在社区组件中提供了常用的接口实现。
其实该版本特性功能早已 Ready
,但由于文档工作量较大,陆续花了 1
个月左右才相对完善,因此版本的发布时间也相应做了调整。我们认为文档和代码同等重要,是发布里程碑不可分割的部分。我们知道怎么用好,也希望能告诉大家怎么用好,才能更务实地帮助到更多的开发者。这也是 GoFrame
框架的文档能够逐步沉淀丰富的原因之一。此外,详尽的源码注释依旧英文为主,以帮助到海外使用者。官网文档仍然以中文为主,帮助到主要的大中国区开发团队。
赶快来看看我们都更新了什么东西吧! Enjoy!
🍺🍺🍺🍺🍺🍺🍺🍺
完整代码变更:v2.3.0...v2.4.0 ,感谢本次所有的贡献开发者:
新特性
正式发布微服务开发特性,并新增完整的微服务开发官网章节: 微服务开发
功能改进
数据库组件
gdb
- 修复跨库操作时自动查询表结构失败的问题: https://github.com/gogf/gf/issues/2338
- 修复
Namespace
配置在pgsql
下未生效的问题。 - 修复使用新版统一配置,无法打开
sqlite
数据库文件的问题: https://github.com/gogf/gf/issues/2435 - 改进底层数据库操作返回逻辑,将底层错误通过
gerror.Wrap
后返回,以保证上层能获取底层自定义错误对象。 - 修复查询数据表时,底层
unsigned
整形字段转换为了signed
整形类型的问题: https://github.com/gogf/gf/issues/2356 - 修复子查询时,多层
Model
作为子查询参数的解析问题: https://github.com/gogf/gf/issues/2339 - 改进时间维护功能,写入/更新/删除时间支持完整的时间(粒度到纳秒)写入。
- 修复在软删除场景下,给定空
Where
条件的未限制执行问题: https://github.com/gogf/gf/issues/2427 gredis
- 修复对象创建时的配置处理及对象初始化问题。
容器组件
garray
- 增加
Filter
方法,用于自定义遍历并过滤数组元素项。 - 增加
RemoveValues
方法,支持按照参数值批量删除元素项。 - 改进
InsertBefore
方法,支持批量的参数插入能力。 gmap
- 增加
IsSubOf
方法,用于判断当前map
是否是指定map
的子集。 gqueue
- 修复
Len/Size
长度计算问题: https://github.com/gogf/gf/issues/2509 - 修复
Close
方法的并发安全问题: https://github.com/gogf/gf/issues/2015
网络组件
gclient
- 增加
SetDiscovery
及SetBuilder
方法,允许调用者自定义客户端的服务发现及负载均衡接口实现。 ghttp
- 改进支持参数接收时从
Header/Cookie
中读取指定参数,支持规范路由中的in
标签定义读取Header/Cookie
(in:header/cookie
)。 - 改进
ResponseWriter
实现http.Flusher
接口,简化使用者的Stream
输出开发逻辑: 数据返回-Stream返回 - 改进链路跟踪实现逻辑,避免内部读取提交内容发生错误时被忽略的问题。
- 改进参数读取逻辑,避免
r.GetRequestMap()
返回内容包含form-data
表单body
信息的问题: https://github.com/gogf/gf/issues/2261 - 改进内部上下文接收逻辑:
- 原有逻辑:去掉忽略底层
Request
的ctx
并新建支持链路跟踪的ctx
- 最新逻辑:继承底层
Request
的ctx
对象,并扩展该ctx
支持链路跟踪特性
- 原有逻辑:去掉忽略底层
- 改进优雅关闭进程逻辑,允许自定义优雅关闭的超时时间。
- 改进配置功能,允许开发者配置自定义的服务注册接口实现对象。
系统组件
gcmd
- 改进
AddObject
方法,允许直接将指定的*Command
或者规范编写的Object
对象添加为子级命令。 gctx
- 修复
GetInitCtx
方法缺失TraceID
的问题: 上下文-gctx gfile
- 改进
Temp
方法,保持基础逻辑实现与标准库os.TempDir
一致,避免单机多人协作时的临时目录冲突问题。 gtimer
- 创建定时器新增
Quick
选项,用以实现是否在添加定时器时同时执行指定的回调方法。
工具组件
gconv
- 修复
Scan
方法转换在部分场景下,如果属性为整型/浮点型数组时的转换失败问题: https://github.com/gogf/gf/issues/2391 - 修复
Interfaces
方法在属性为0的场景下,转换结构体直接返回[]
的问题: https://github.com/gogf/gf/issues/2395 - 修复当
json tag
为,omitempty
不带变量名称的结构体转换问题。 - 修复当转换目标类型为自定义基本类型的指针,而转换失败的问题。
- 修复
gvar.Var
类型转换为常见第三方包decimal.Decimal
类型失败的问题: https://github.com/gogf/gf/issues/2584 - 改进
Struct
方法,解决当结构体的属性类型为time.Time/*time.Time
,给定的转换值为非标准库支持的字符串如2022-12-15 16:11:34
而引发的转换失败问题: https://github.com/gogf/gf/issues/2371 gtag
- 增加
SetGlobalEnums/GetEnumsByType
方法,用以实现自动化的Golang Enums
管理。需要结合gf gen enums
命令使用。 gutil
- 修复
Dump
方法在个别场景下的空指针报错问题: https://github.com/gogf/gf/issues/2487 gvalid
- 自定义校验方法参数新增
Field
字段,表示校验字段的名称,用以解决自定义校验错误提示的字段丢失问题: https://github.com/gogf/gf/issues/2499
社区组件
数据库驱动
- 改进
dm/mysql
组件,解决当时区配置中带有特殊字符(例如/
)的QueryEscape
问题。
NoSQL适配
- 修复
redis
组件配置中缺失的连接池配置参数。
服务注册发现
- 增加
file
注册发现组件,用于本地基于文件的服务注册发现,通常用于单节点测试。 - 完善
etcd/polaris/zookeeper
实现细节,并完善单测用例。
微服务脚手架
- 新增
grpcx
微服务组件,用于grpc
通信协议的微服务开发: 微服务开发
开发工具
- 增加
gf gen pb
命令,用于编译proto
文件生成go pb
文件: 协议编译-gen pb - 增加
gf gen pbentity
命令,用于自动生成数据库表的proto
数据结构定义文件: 数据表PB-gen pbentity - 增加
gf gen enums
命令,用于解析指定目录go
文件,并根据enum
定义规范自动生成enums
数据文件,主要用于OpenAPI
接口文档展示(实验特性): 枚举维护-gen enums - 改进
gf up
命令,增加自动升级工具CLI
的功能。 - 改进
gf gen service
命令,当方法注释后不再自动生成到接口定义文件中。 - 改进
gf build
命令,增加DumpENV
选项,用于控制在编译时是否打印编译使用的环境信息,默认关闭。 - 改进
gf docker
命令,增加Tag
选项,用以兼容旧版本。