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

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

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

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

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

v2.4 2023-04-24 - 图1

新特性

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

功能改进

数据库组件

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

容器组件

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

网络组件

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

系统组件

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

工具组件

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