大家好啊, GoFrame 框架今天发布了 v2.4.0 正式版本啦!👏👏👏👏

该版本最大的亮点在于提供了 微服务开发的功能特性、开发工具以及工程脚手架,并且提供了完善的 微服务开发文档!!微服务的组件设计仍然以接口设计为主,以保证良好的灵活性和扩展性,接口维护在框架主库中;具体的接口实现仍然以务实为主,并在社区组件中提供了常用的接口实现。

其实该版本特性功能早已 Ready,但由于文档工作量较大,陆续花了 1 个月左右才相对完善,因此版本的发布时间也相应做了调整。我们认为文档和代码同等重要,是发布里程碑不可分割的部分。我们知道怎么用好,也希望能告诉大家怎么用好,才能更务实地帮助到更多的开发者。这也是 GoFrame 框架的文档能够逐步沉淀丰富的原因之一。此外,详尽的源码注释依旧英文为主,以帮助到海外使用者。官网文档仍然以中文为主,帮助到主要的大中国区开发团队。

赶快来看看我们都更新了什么东西吧! Enjoy! 🍺🍺🍺🍺🍺🍺🍺🍺

完整代码变更:v2.3.0…v2.4.0 ,感谢本次所有的贡献开发者:

v2.4 2023-04-24 - 图1

新特性

正式发布微服务开发特性,并新增完整的微服务开发官网章节: 微服务开发

功能改进

数据库组件

  1. gdb
  2. 修复跨库操作时自动查询表结构失败的问题: https://github.com/gogf/gf/issues/2338
  3. 修复 Namespace 配置在 pgsql 下未生效的问题。
  4. 修复使用新版统一配置,无法打开 sqlite 数据库文件的问题: https://github.com/gogf/gf/issues/2435
  5. 改进底层数据库操作返回逻辑,将底层错误通过 gerror.Wrap 后返回,以保证上层能获取底层自定义错误对象。
  6. 修复查询数据表时,底层 unsigned 整形字段转换为了 signed 整形类型的问题: https://github.com/gogf/gf/issues/2356
  7. 修复子查询时,多层 Model 作为子查询参数的解析问题: https://github.com/gogf/gf/issues/2339
  8. 改进时间维护功能,写入/更新/删除时间支持完整的时间(粒度到纳秒)写入。
  9. 修复在软删除场景下,给定空 Where 条件的未限制执行问题: https://github.com/gogf/gf/issues/2427
  10. gredis
  11. 修复对象创建时的配置处理及对象初始化问题。

容器组件

  1. garray
  2. 增加 Filter 方法,用于自定义遍历并过滤数组元素项。
  3. 增加 RemoveValues 方法,支持按照参数值批量删除元素项。
  4. 改进 InsertBefore 方法,支持批量的参数插入能力。
  5. gmap
  6. 增加 IsSubOf 方法,用于判断当前 map 是否是指定 map 的子集。
  7. gqueue
  8. 修复 Len/Size 长度计算问题: https://github.com/gogf/gf/issues/2509
  9. 修复 Close 方法的并发安全问题: https://github.com/gogf/gf/issues/2015

网络组件

  1. gclient
  2. 增加 SetDiscoverySetBuilder 方法,允许调用者自定义客户端的服务发现及负载均衡接口实现。
  3. ghttp
  4. 改进支持参数接收时从 Header/Cookie 中读取指定参数,支持规范路由中的 in 标签定义读取 Header/Cookiein:header/cookie)。
  5. 改进 ResponseWriter 实现 http.Flusher 接口,简化使用者的 Stream 输出开发逻辑: 数据返回-Stream返回
  6. 改进链路跟踪实现逻辑,避免内部读取提交内容发生错误时被忽略的问题。
  7. 改进参数读取逻辑,避免 r.GetRequestMap() 返回内容包含 form-data 表单 body 信息的问题: https://github.com/gogf/gf/issues/2261
  8. 改进内部上下文接收逻辑:
    1. 原有逻辑:去掉忽略底层 Requestctx 并新建支持链路跟踪的 ctx
    2. 最新逻辑:继承底层 Requestctx 对象,并扩展该 ctx 支持链路跟踪特性
  9. 改进优雅关闭进程逻辑,允许自定义优雅关闭的超时时间。
  10. 改进配置功能,允许开发者配置自定义的服务注册接口实现对象。

系统组件

  1. gcmd
  2. 改进 AddObject 方法,允许直接将指定的 *Command 或者规范编写的 Object 对象添加为子级命令。
  3. gctx
  4. 修复 GetInitCtx 方法缺失 TraceID 的问题: 上下文-gctx
  5. gfile
  6. 改进 Temp 方法,保持基础逻辑实现与标准库 os.TempDir 一致,避免单机多人协作时的临时目录冲突问题。
  7. gtimer
  8. 创建定时器新增 Quick 选项,用以实现是否在添加定时器时同时执行指定的回调方法。

工具组件

  1. gconv
  2. 修复 Scan 方法转换在部分场景下,如果属性为整型/浮点型数组时的转换失败问题: https://github.com/gogf/gf/issues/2391
  3. 修复 Interfaces 方法在属性为0的场景下,转换结构体直接返回 [] 的问题: https://github.com/gogf/gf/issues/2395
  4. 修复当 json tag,omitempty 不带变量名称的结构体转换问题。
  5. 修复当转换目标类型为自定义基本类型的指针,而转换失败的问题。
  6. 修复 gvar.Var 类型转换为常见第三方包 decimal.Decimal 类型失败的问题: https://github.com/gogf/gf/issues/2584
  7. 改进 Struct 方法,解决当结构体的属性类型为 time.Time/*time.Time,给定的转换值为非标准库支持的字符串如 2022-12-15 16:11:34 而引发的转换失败问题: https://github.com/gogf/gf/issues/2371
  8. gtag
  9. 增加 SetGlobalEnums/GetEnumsByType 方法,用以实现自动化的 Golang Enums 管理。需要结合 gf gen enums 命令使用。
  10. gutil
  11. 修复 Dump 方法在个别场景下的空指针报错问题: https://github.com/gogf/gf/issues/2487
  12. gvalid
  13. 自定义校验方法参数新增 Field 字段,表示校验字段的名称,用以解决自定义校验错误提示的字段丢失问题: https://github.com/gogf/gf/issues/2499

社区组件

数据库驱动

  1. 改进 dm/mysql 组件,解决当时区配置中带有特殊字符(例如 /)的 QueryEscape 问题。

NoSQL适配

  1. 修复 redis 组件配置中缺失的连接池配置参数。

服务注册发现

  1. 增加 file 注册发现组件,用于本地基于文件的服务注册发现,通常用于单节点测试。
  2. 完善 etcd/polaris/zookeeper 实现细节,并完善单测用例。

微服务脚手架

  1. 新增 grpcx 微服务组件,用于 grpc 通信协议的微服务开发: 微服务开发

开发工具

  1. 增加 gf gen pb 命令,用于编译 proto 文件生成 go pb 文件: 协议编译-gen pb
  2. 增加 gf gen pbentity 命令,用于自动生成数据库表的 proto 数据结构定义文件: 数据表PB-gen pbentity
  3. 增加 gf gen enums 命令,用于解析指定目录 go 文件,并根据 enum 定义规范自动生成 enums 数据文件,主要用于 OpenAPI 接口文档展示(实验特性): 枚举维护-gen enums
  4. 改进 gf up 命令,增加自动升级工具 CLI 的功能。
  5. 改进 gf gen service 命令,当方法注释后不再自动生成到接口定义文件中。
  6. 改进 gf build 命令,增加 DumpENV 选项,用于控制在编译时是否打印编译使用的环境信息,默认关闭。
  7. 改进 gf docker 命令,增加 Tag 选项,用以兼容旧版本。