Hello,小伙伴久等啦!距离上一次发布,时隔刚好半年,这半年发生了很多很多的事情。薛老的猫以不同的观测方式决定了小猫不同的结果,同样看待世界的不同方式决定了世界在我们眼中的样子。这次给大家带来了最新 GoFrame v1.16 版本! GoFrame 是一款模块化、高性能、企业级的 Go 基础开发框架: https://goframe.org ,一款低调务实、真正意义的企业级 Golang 开发框架!本次更新包含了大量的新特性和功能改进,特别是全链路跟踪、 ORM 模型关联/嵌套事务/子查询/数十项新增方法、 HTTP 客户端拦截器、数据校验及 I18N 组件改进、重构版的定时器等等。本次更新内容较多,以下为主要更新介绍,希望大家喜欢! Enjoy!

v1.16 2021-06-01 - 图1

本次文档有大量更新,目前开发文档总约有20+万字,建议按照官方目录结构进行阅读

重要特性

  1. 框架新增 全链路跟踪 特性,采用 OpenTelementry 标准,目前已打通 HTTP Client&Server/GRPC Client&Server/ORM/Redis/Logging 组件,详细介绍请参考章节:
  2. 链路跟踪-基本示例
  3. 链路跟踪-HTTP示例
  4. 链路跟踪-GRPC示例
  5. 数据库核心组件新增以下特性:
  6. 模型关联
    1. 模型关联-动态关联-ScanList
    2. 模型关联-静态关联-With特性
  7. 嵌套事务ORM事务处理
  8. 子查询 特性: ORM查询-子查询特性
  9. 新增 数十项 个ORM模型操作方法(参考 PHP Laravel),正在使用 goframe 的小伙伴们建议务必看一下:
    1. ORM链式操作(🔥重点🔥)
    2. ORM链式操作-写入保存
    3. ORM链式操作-更新删除
    4. ORM链式操作-数据查询
  10. HTTP 客户端增加中间件拦截器 功能特性,详情请参考章节: HTTPClient-拦截器/中间件
  11. 数据校验组件大量改进:
  12. 增加链式操作校验对象: 数据校验-校验对象
  13. 增加对 Context 的支持,并改进支持了强大的 I18N 国际化错误信息管理能力,详情请参考章节:
    1. I18N国际化
    2. 数据校验-自定义错误
  14. 自定义校验规则改进,增加局部校验规则注册特性,增加完整数据校验: 数据校验-自定义规则
  15. 定时器组件 gtimer 的全新重构,去掉 TimingWheel 的实现,改为了更加稳健的 PriorityQueue 的改进实现,详情请参考章节: 定时器-gtimer
  16. 框架核心基础组件已增加全错误堆栈特性。当错误产生时可以完整获取链路相关组件的错误堆栈信息。该特性只有一款基础组件相对完善并且统一设计的开发框架才能具备。

功能改进

  1. ORM
    1. 增加全链路的链路跟踪上下文 Context 参数传递: ORM上下文变量 链路跟踪中默认会记录 SQL 以及数据库连接信息(不包含敏感配置),组件链路跟踪信息可配置关闭。
    2. 进一步完善 ORM 组件日志记录,日志仅在调试模式下有效,详细介绍请参考章节: ORM高级特性
    3. 新增数十项 ORM 模型操作方法(参考 PHP Laravel),例如: InsertAndGetIdMin/Max/Avg/SumIncrement/DecrementWhereBetween/WhereLike/WhereIn/WhereNullOrderAsc/OrderDesc/OrderRandom 等等。正在使用 goframe 的小伙伴们建议务必看一下,详情请参考章节:
      1. ORM链式操作(🔥重点🔥)
      2. ORM链式操作-写入保存
      3. ORM链式操作-更新删除
      4. ORM链式操作-数据查询
    4. 新版本开始,数据库 ORM 链式操作默认启用了字段过滤特性,当给定的参数无法与数据表字段智能匹配时将会被自动过滤,详情请参考章节: ORM链式操作-字段过滤
    5. 改进 pgsql 数据库类型 int8Golang 类型的转换,从 int 类型调整为了 int64
    6. 大量重构、改进工作,细节比较多,这里不再一一赘述。关键结果是组件功能更加丰富、代码更加严谨、设计更加简洁、使用更加便捷。
  2. HTTP
    1. HTTP Client 增加中间件拦截器功能特性: HTTPClient-拦截器/中间件
    2. HTTP Client&Server 增加链路跟踪支持: 链路跟踪-HTTP示例
    3. ghttp 包中的客户端请求方法标记废除,后续统一采用 HTTP Client 对象方式使用。
    4. 改进 Request.Parse 方法的数据校验,直接校验提交参数,而不是校验数据转换后的 struct 对象: 请求输入-请求校验
    5. 增加 WrapF/WrapH 方法,用于将标准库的 http.HandlerFunc/http.Handler 转换为 ghttp.Server 支持的服务方法类型。
    6. 其他大量改进工作,细节也很多。关键结果就是组件功能更加丰富、代码更加严谨、使用更加便捷。
  3. gvalid
    1. Check 方法名称修改为了 CheckValue,详情请参考章节: 数据校验-单数据校验
    2. 新增 CheckStructWithData 方法,用于校验指定参数的 struct 对象: 数据校验-Struct校验
    3. 新增 Validator 校验对象,用于便捷的链式操作,并可在后期进行进一步扩展: 数据校验-校验对象
    4. 自定义的规则方法定义增加了 Context 上下文变量输入,并增加 RuleFuncRuleFuncMap 局部校验规则注册方法: 数据校验-自定义规则
    5. 左右校验方法增加了 Context 参数支持,并改进支持了强大的 I18N 国际化错误信息管理能力:
      1. I18N国际化
      2. 数据校验-自定义错误
    6. Error 错误对象修改为了接口实现,需要注意之前使用 *Error 指针方式的地方会报错。
    7. 其他一些细节改进。
  4. gcache
    1. 增加 Ctx 链式操作方法,用于上下文参数输入,详情请参考章节: 缓存管理
    2. Adapter 接口增加 Context 参数输入,便于上下文参数传递,并改进相关内置实现的适配器支持上下文参数传递: 缓存管理-接口设计
  5. gredis
    1. 增加了对链路跟踪的支持,详情请参考章节:Redis-Context
  6. gjson
    1. Option 类型名称修改为了 Options,这是一项非兼容性更新。
    2. NewWithOption 方法名称修改为了 NewWithOptions
  7. gcmd
    1. 新增 GetOptWithEnv 方法,并将 GetWithEnv 方法标记废弃。
  8. glog
    1. 增加基于 OpenTelemetry 标准的链路跟踪支持: 日志组件-Context
  9. gproc
    1. 增加统一的信号注册监听回调特性: 进程管理-信号监听
  10. gres
    1. 资源管理的最佳实践参考: 资源管理-最佳实践
  11. gtimer
    1. 定时器组件 gtimer 的全新重构,去掉 TimingWheel 的实现,改为了更加稳健的 PriorityQueue 的改进实现,详情请参考章节: 定时器-gtimer
  12. gview
    1. 所有模板解析方法增加了 Context 参数输入: 模板引擎
  13. gconv
    1. 改进 Scan 方法,增加对 Map/Maps 参数类型的自动转换支持: 类型转换-Scan转换
  14. gi18n
    1. I18N 国际化组件增加对 Context 的支持,详情请参考章节: I18N国际化
    2. 注意,所有方法都增加了 ctx 参数的输入,并去掉了部分方法的 language 参数,转而由 ctx 参数来控制 language 输入,并提高可扩展性: I18N国际化-使用介绍
    3. 去掉了 TranslateFormatLangTfl 方法。
  15. gmeta
    1. 新增 gmeta 元数据包,详情请参考章节: 元数据-gmeta
  16. 各个组件的其他一些细节改进,不用特意在发布文档中阐述。

开发工具链

CLI 工具有更新,主要是简化了 dao 模型代码生成,去掉了重复方法生成,去掉了直接返回模型对象的相关方法, dao 对象修改为了直接继承 GoFrame ORM 组件中的 Model 对象,通过给定模型接受查询数据,因此部分方法使用的方式会需要调整。