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
。 - 大量重构、改进工作,细节比较多,这里不再一一赘述。关键结果是组件功能更加丰富、代码更加严谨、设计更加简洁、使用更加便捷。
- 增加全链路的链路跟踪上下文
HTTP
HTTP Client
增加中间件拦截器功能特性: HTTPClient-拦截器/中间件HTTP Client&Server
增加链路跟踪支持: 链路跟踪-HTTP示例ghttp
包中的客户端请求方法标记废除,后续统一采用HTTP Client
对象方式使用。- 改进
Request.Parse
方法的数据校验,直接校验提交参数,而不是校验数据转换后的struct
对象: 请求输入-请求校验 - 增加
WrapF/WrapH
方法,用于将标准库的http.HandlerFunc/http.Handler
转换为ghttp.Server
支持的服务方法类型。 - 其他大量改进工作,细节也很多。关键结果就是组件功能更加丰富、代码更加严谨、使用更加便捷。
gvalid
Check
方法名称修改为了CheckValue
,详情请参考章节: 数据校验-单数据校验- 新增
CheckStructWithData
方法,用于校验指定参数的struct
对象: 数据校验-Struct校验 - 新增
Validator
校验对象,用于便捷的链式操作,并可在后期进行进一步扩展: 数据校验-校验对象 - 自定义的规则方法定义增加了
Context
上下文变量输入,并增加RuleFunc
及RuleFuncMap
局部校验规则注册方法: 数据校验-自定义规则 - 左右校验方法增加了
Context
参数支持,并改进支持了强大的I18N
国际化错误信息管理能力: Error
错误对象修改为了接口实现,需要注意之前使用*Error
指针方式的地方会报错。- 其他一些细节改进。
gcache
gredis
- 增加了对链路跟踪的支持,详情请参考章节:Redis-Context
gjson
Option
类型名称修改为了Options
,这是一项非兼容性更新。NewWithOption
方法名称修改为了NewWithOptions
。
gcmd
- 新增
GetOptWithEnv
方法,并将GetWithEnv
方法标记废弃。
- 新增
glog
- 增加基于
OpenTelemetry
标准的链路跟踪支持: 日志组件-Context
- 增加基于
gproc
- 增加统一的信号注册监听回调特性: 进程管理-信号监听
gres
- 资源管理的最佳实践参考: 资源管理-最佳实践
gtimer
- 定时器组件
gtimer
的全新重构,去掉TimingWheel
的实现,改为了更加稳健的PriorityQueue
的改进实现,详情请参考章节: 定时器-gtimer
- 定时器组件
gview
- 所有模板解析方法增加了
Context
参数输入: 模板引擎
- 所有模板解析方法增加了
gconv
- 改进
Scan
方法,增加对Map/Maps
参数类型的自动转换支持: 类型转换-Scan转换
- 改进
gi18n
I18N
国际化组件增加对Context
的支持,详情请参考章节: I18N国际化- 注意,所有方法都增加了
ctx
参数的输入,并去掉了部分方法的language
参数,转而由ctx
参数来控制language
输入,并提高可扩展性: I18N国际化-使用介绍 - 去掉了
TranslateFormatLang
、Tfl
方法。
gmeta
- 新增
gmeta
元数据包,详情请参考章节: 元数据-gmeta
- 新增
- 各个组件的其他一些细节改进,不用特意在发布文档中阐述。
开发工具链
CLI
工具有更新,主要是简化了 dao
模型代码生成,去掉了重复方法生成,去掉了直接返回模型对象的相关方法, dao
对象修改为了直接继承 GoFrame ORM
组件中的 Model
对象,通过给定模型接受查询数据,因此部分方法使用的方式会需要调整。