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

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

新特性

  1. 开发工具新增gen service命令,支持自动化地根据logic层级代码,生成service接口代码、实现注入:模块规范-gen service
  2.  数据库组件特性:
    1. 新增WhereBuilder特性,用于更加灵活的SQL条件语句组合:ORM查询-Where/WhereOr/WhereNot
    2. 新增Hook特性,用于自定义钩子事件处理:ORM链式操作-Hook特性
  3. 框架新增DeepCopy特性,用于类型的深度拷贝:
    1. 新增gutil.Copy方法,用于深度拷贝指定内容。
    2. 泛型类型新增Copy方法,用于深度拷贝自身内容。
    3. 框架部分数据类型已支持深度拷贝特性,例如: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
    1. 改进服务发现实现逻辑。
    2. 修复客户端关闭错误,引起的连接池无法复用问题。
  2. ghttp
    1. 改进Request.GetUrl方法对URL Schema获取细节。
    2. 参数接收支持UploadFile属性自动接收。
    3. 新增接口文档自定义UI指导文档:接口文档-自定义UI
    4. 接口文档默认依赖的外部JS CDN改为unpkg.com
    5. 改进服务注册实现逻辑。
    6. 改进内部细节实现逻辑。
    7. 修复参数为空判断问题。
  3. goai
    1. 改进更规范化符合OpenAPIV3协议实现。
    2. 支持所有x-开头的自定义标签,自动添加OpenAPIV3的结果中。
    3. 组件从protocol分类迁移到了net分类下,import路径发生改变。

系统组件

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

容器组件

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

数据库组件

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

编解码组件

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

文本处理

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

错误处理

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

工具方法

  1. gconv
    1. 去掉整型转换时对八进制字符串的支持。
    2. 改进内部实现逻辑,提高可读性保障可维护性。
  2. gutil
    1. 新增gutil.Copy方法,用于深度拷贝指定内容。
    2. 改进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时区处理