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

本次文档有大量更新,目前开发文档总约有20+万字,建议按照官方目录结构进行阅读
重要特性
- 框架新增 全链路跟踪 特性,采用
OpenTelementry标准,目前已打通HTTP Client&Server/GRPC Client&Server/ORM/Redis/Logging组件,详细介绍请参考章节: - 链路跟踪-基本示例
- 链路跟踪-HTTP示例
- 链路跟踪-GRPC示例
- 数据库核心组件新增以下特性:
- 模型关联:
- 嵌套事务: ORM事务处理
- 子查询 特性: ORM查询-子查询特性
- 新增 数十项 个ORM模型操作方法(参考
PHP Laravel),正在使用goframe的小伙伴们建议务必看一下: - HTTP 客户端增加中间件拦截器 功能特性,详情请参考章节: HTTPClient-拦截器/中间件
- 数据校验组件大量改进:
- 增加链式操作校验对象: 数据校验-校验对象
- 增加对
Context的支持,并改进支持了强大的I18N国际化错误信息管理能力,详情请参考章节: - 自定义校验规则改进,增加局部校验规则注册特性,增加完整数据校验: 数据校验-自定义规则
- 定时器组件
gtimer的全新重构,去掉TimingWheel的实现,改为了更加稳健的PriorityQueue的改进实现,详情请参考章节: 定时器-gtimer - 框架核心基础组件已增加全错误堆栈特性。当错误产生时可以完整获取链路相关组件的错误堆栈信息。该特性只有一款基础组件相对完善并且统一设计的开发框架才能具备。
功能改进
ORM- 增加全链路的链路跟踪上下文
Context参数传递: ORM上下文变量 链路跟踪中默认会记录SQL以及数据库连接信息(不包含敏感配置),组件链路跟踪信息可配置关闭。 - 进一步完善
ORM组件日志记录,日志仅在调试模式下有效,详细介绍请参考章节: ORM高级特性 - 新增数十项
ORM模型操作方法(参考PHP Laravel),例如:InsertAndGetId、Min/Max/Avg/Sum、Increment/Decrement、WhereBetween/WhereLike/WhereIn/WhereNull、OrderAsc/OrderDesc/OrderRandom等等。正在使用goframe的小伙伴们建议务必看一下,详情请参考章节: - 新版本开始,数据库
ORM链式操作默认启用了字段过滤特性,当给定的参数无法与数据表字段智能匹配时将会被自动过滤,详情请参考章节: ORM链式操作-字段过滤 - 改进
pgsql数据库类型int8到Golang类型的转换,从int类型调整为了int64。 - 大量重构、改进工作,细节比较多,这里不再一一赘述。关键结果是组件功能更加丰富、代码更加严谨、设计更加简洁、使用更加便捷。
- 增加全链路的链路跟踪上下文
HTTPHTTP Client增加中间件拦截器功能特性: HTTPClient-拦截器/中间件HTTP Client&Server增加链路跟踪支持: 链路跟踪-HTTP示例ghttp包中的客户端请求方法标记废除,后续统一采用HTTP Client对象方式使用。- 改进
Request.Parse方法的数据校验,直接校验提交参数,而不是校验数据转换后的struct对象: 请求输入-请求校验 - 增加
WrapF/WrapH方法,用于将标准库的http.HandlerFunc/http.Handler转换为ghttp.Server支持的服务方法类型。 - 其他大量改进工作,细节也很多。关键结果就是组件功能更加丰富、代码更加严谨、使用更加便捷。
gvalidCheck方法名称修改为了CheckValue,详情请参考章节: 数据校验-单数据校验- 新增
CheckStructWithData方法,用于校验指定参数的struct对象: 数据校验-Struct校验 - 新增
Validator校验对象,用于便捷的链式操作,并可在后期进行进一步扩展: 数据校验-校验对象 - 自定义的规则方法定义增加了
Context上下文变量输入,并增加RuleFunc及RuleFuncMap局部校验规则注册方法: 数据校验-自定义规则 - 左右校验方法增加了
Context参数支持,并改进支持了强大的I18N国际化错误信息管理能力: Error错误对象修改为了接口实现,需要注意之前使用*Error指针方式的地方会报错。- 其他一些细节改进。
gcachegredis- 增加了对链路跟踪的支持,详情请参考章节:Redis-Context
gjsonOption类型名称修改为了Options,这是一项非兼容性更新。NewWithOption方法名称修改为了NewWithOptions。
gcmd- 新增
GetOptWithEnv方法,并将GetWithEnv方法标记废弃。
- 新增
glog- 增加基于
OpenTelemetry标准的链路跟踪支持: 日志组件-Context
- 增加基于
gproc- 增加统一的信号注册监听回调特性: 进程管理-信号监听
gres- 资源管理的最佳实践参考: 资源管理-最佳实践
gtimer- 定时器组件
gtimer的全新重构,去掉TimingWheel的实现,改为了更加稳健的PriorityQueue的改进实现,详情请参考章节: 定时器-gtimer
- 定时器组件
gview- 所有模板解析方法增加了
Context参数输入: 模板引擎
- 所有模板解析方法增加了
gconv- 改进
Scan方法,增加对Map/Maps参数类型的自动转换支持: 类型转换-Scan转换
- 改进
gi18nI18N国际化组件增加对Context的支持,详情请参考章节: I18N国际化- 注意,所有方法都增加了
ctx参数的输入,并去掉了部分方法的language参数,转而由ctx参数来控制language输入,并提高可扩展性: I18N国际化-使用介绍 - 去掉了
TranslateFormatLang、Tfl方法。
gmeta- 新增
gmeta元数据包,详情请参考章节: 元数据-gmeta
- 新增
- 各个组件的其他一些细节改进,不用特意在发布文档中阐述。
开发工具链
CLI 工具有更新,主要是简化了 dao 模型代码生成,去掉了重复方法生成,去掉了直接返回模型对象的相关方法, dao 对象修改为了直接继承 GoFrame ORM 组件中的 Model 对象,通过给定模型接受查询数据,因此部分方法使用的方式会需要调整。