大家好,本次发布的 v2.1 版本包含一些与业务实践相关的功能特性、改进以及Bug Fix,建议大家升级。

视频介绍: 2022-06-22 GoFrame v2.1功能特性&使用答疑

新特性

  1. 开发工具新增 gen service 命令,支持自动化地根据 logic 层级代码,生成 service 接口代码、实现注入: 模块规范-gen service
  2. 数据库组件特性:
  3. 新增 WhereBuilder 特性,用于更加灵活的 SQL 条件语句组合: ORM查询-Where条件
  4. 新增 Hook 特性,用于自定义钩子事件处理: ORM链式操作-Hook特性
  5. 框架新增 DeepCopy 特性,用于类型的深度拷贝:
  6. 新增 gutil.Copy 方法,用于深度拷贝指定内容。
  7. 泛型类型新增 Copy 方法,用于深度拷贝自身内容。
  8. 框架部分数据类型已支持深度拷贝特性,例如: gvar, garray, gmap 等基础容器类型。

主要改进

社区组件

ORM驱动实现

  1. 新增 drivers/clickhouse,用于对接 clickhousegoframe ORM 组件。
  2. 完善 clickhouse/mssql/pgsql/sqlite/oracle 组件单元测试。
  3. mysql 驱动从主库迁移到社区模块,便于将 mysql 从主库解耦。因此从后续版本开始,开发者需要手动引入驱动依赖: https://github.com/gogf/gf/tree/master/contrib/drivers

注册发现实现

  1. 新增 polaris 北极星服务注册接口实现: https://github.com/gogf/gf/tree/master/contrib/registry/polaris
  2. 改进 etcd 服务注册发现接口实现组件: https://github.com/gogf/gf/tree/master/contrib/registry/etcd

注册发现

  1. Service 实现对象改进为接口定义,并提供默认的 Service 实现,提高扩展性和易用性。
  2. 改进 HTTP/GRPC Client&Server 对接实现。

负载均衡

  1. 改进 Node 接口定义,新增 Nodes 接口定义。
  2. 修复 HTTP Client 下的服务发现负载均衡问题。

网络组件

  1. gclient
  2. 改进服务发现实现逻辑。
  3. 修复客户端关闭错误,引起的连接池无法复用问题。
  4. ghttp
  5. 改进 Request.GetUrl 方法对 URL Schema 获取细节。
  6. 参数接收支持 UploadFile 属性自动接收。
  7. 新增接口文档自定义UI指导文档: 接口文档-自定义UI
  8. 接口文档默认依赖的外部 JS CDN 改为 unpkg.com
  9. 改进服务注册实现逻辑。
  10. 改进内部细节实现逻辑。
  11. 修复参数为空判断问题。
  12. goai
  13. 改进更规范化符合 OpenAPIV3 协议实现。
  14. 支持所有 x- 开头的自定义标签,自动添加 OpenAPIV3 的结果中。
  15. 组件从 protocol 分类迁移到了 net 分类下, import 路径发生改变。

系统组件

  1. gcfg
  2. 默认的文件系统接口实现新增对 property 文件格式的支持。
  3. gcmd
  4. 参数解析新增 CaseSensitive 配置,默认不区分大小写解析,特别针对结构化参数接收影响较大: 命令管理-结构化参数
  5. 新增跨进程的链路跟踪特性: 命令管理-链路跟踪
  6. glog
  7. 新增全局的 Handler 设置功能,开发者可以全局自定义处理 glog 组件的所有日志,例如全局输出 JSON 文件格式: 日志组件-Handler
  8. 新增默认的 JSON 格式 Handler 供开发者使用: 日志组件-Handler
  9. gsession
  10. 解决当访问用户过多造成的内存占用过大的问题。
  11. gproc
  12. 新增跨进程的链路跟踪特性: 进程管理-链路跟踪

容器组件

  1. garray
  2. 改进 Unique 方法性能,增加 DeepCopy 接口实现。
  3. glist
  4. 增加 DeepCopy 接口实现。
  5. gmap
  6. 增加 DeepCopy 接口实现。
  7. gset
  8. 增加 DeepCopy 接口实现。
  9. gtype
  10. 增加 DeepCopy 接口实现。
  11. gvar
  12. 增加 Copy 方法,用于深度拷贝当前泛型对象。
  13. 增加 DeepCopy 接口实现。

数据库组件

  1. gdb
  2. 新增 WhereBuilder 特性,用于更加灵活的 SQL 条件语句组合: ORM查询-Where条件
  3. 新增 HOOK 特性,用于自定义钩子事件处理: ORM链式操作-Hook特性
  4. 改进数据提交到底层 driver 前的数据转换处理逻辑。
  5. mysql 驱动从主库迁移到社区模块,便于将 mysql 从主库解耦。因此从后续版本开始,开发者需要手动引入驱动依赖: https://github.com/gogf/gf/tree/master/contrib/drivers

编解码组件

  1. gproperty
  2. 新增 gproperty 组件,用于解析 Java Property 格式文件。
  3. gjson
  4. 新增对 property 文件格式的编解码、数据操作支持: 通用编解码-gjson
  5. 修复对大整形数据读取的精度丢失问题。

文本处理

  1. gstr
  2. 改进 WordWrap 方法,使得对 Unicode 特别是中文换行更加友好。
  3. 修复 RepliceI 忽略大小写字符串替换在特定场景下的问题。

错误处理

  1. gerror
  2. 新增 Unwrap 方法(同 Next 方法),用以支持 Golang 新版本的 Unwrap 错误接口。
  3. 新增 Equal 方法,用于判断两个错误是否相等: 错误处理-错误比较
  4. 新增 Is 方法,用于支持 Golang 新版本的 Is 错误接口: 错误处理-错误比较

工具方法

  1. gconv
  2. 去掉整型转换时对八进制字符串的支持。
  3. 改进内部实现逻辑,提高可读性保障可维护性。
  4. gutil
  5. 新增 gutil.Copy 方法,用于深度拷贝指定内容。
  6. 改进 gutil.Dump 方法。

开发工具

相对于主库稳定的代码组件,CLI开发工具在近期的版本发布有一些非兼容更新,各位在升级时注意发布记录,细节请查看源码调整。

  1. 改进 build 命令,支持指定 pack 代码文件的生成目录,参数有个别调整。
  2. 改进 docker 命令,支持多个 docker tag 的重命名及仓库自动推送。
  3. 改进 gen dao 命令,支持自定义 dao/do/entity 代码生成目录,不再强制生成到 service/internal 目录下: 数据规范-gen dao
  4. 新增 gen service 命令,支持自动化地根据 logic 层级代码,生成 service 接口代码: 模块规范-gen service
  5. 修复 run 命令自定义程序启动参数问题、 gofmt/goimports 程序路径带空格问题。

不兼容事项

  1. mysql 驱动从主库迁移到社区模块,便于将 mysql 从主库解耦。因此从后续版本开始,开发者需要手动引入驱动依赖: https://github.com/gogf/gf/tree/master/contrib/drivers
  2. ghttp.Response.WriteJson/Xml 等方法不再返回 error。根据编译错误调整即可。
  3. goai 组件从 protocol 分类迁移到了 net 分类下, import 路径发生改变。根据编译错误调整即可。
  4. 数据库 ORM 操作参数中带有 gtime.Time 类型,为了解决时间精度丢失的问题,将会自动转换为 time.Time 类型再提交给底层的数据库 driver。也就是说, gtime.Time 类型参数也会受到数据库配置的时区配置参数影响。具体请参考: ORM时区处理