golang快速开发框架,大家好啊,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的子集。
- 修复Len/Size长度计算问题:https://github.com/gogf/gf/issues/2509
网络组件
-
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
- 改进Temp方法,保持基础逻辑实现与标准库os.TempDir一致,避免单机多人协作时的临时目录冲突问题。
- 创建定时器新增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命令使用。
- 修复Dump方法在个别场景下的空指针报错问题:https://github.com/gogf/gf/issues/2487
- 自定义校验方法参数新增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选项,用以兼容旧版本。