Go 企业级框架 GoFrame 发布全新 v2.0 版本

栏目: 软件资讯 · 发布时间: 3年前

内容简介:大家好啊!万众瞩目的GoFrame v2版本终于发布了正式版本!本次版本包含了大量改进以及新特性,同时新增了一些开创性的功能特性。 去年夏天到今年春天,一路以来的努力,希望大家满意。 感谢所有社区小伙伴的贡献,...

大家好啊!万众瞩目的GoFrame v2版本终于发布了正式版本!本次版本包含了大量改进以及新特性,同时新增了一些开创性的功能特性。

去年夏天到今年春天,一路以来的努力,希望大家满意。

感谢所有社区小伙伴的贡献,感谢社区朋友们的支持!

新的一年,我们继续,脚踏实地,不忘初心!

一、重要特性

1、新版工程设计

  • 更加严谨规范
  • 命名风格的规范
  • 指针与值传递参数的规范
  • 进一步简便、提高开发效率
  • 新版开发 工具 支持工程规范准确落地
  • Entity/DAO/DO特性
  • 面向接口化设计
  • 更多详细介绍:工程开发设计

2、全链路跟踪特性

  • 可观测性更进一步:大胆的前瞻以及决心
  • 框架默认启用OpenTelemetry特性
  • 框架默认创建TraceID,按照OpenTelemetry生成标准
  • 框架核心组件均支持链路跟踪信息传递
  • 日志组件支持链路信息打印
  • 更多详细介绍:全链路跟踪设计

3、规范路由注册特性

  • 规范化API按照结构化编程设计
  • 规范化API接口方法参数风格定义
  • 更加简化的路由注册与维护
  • 统一接口返回数据格式设计
  • 自动的API参数对象化接收与校验
  • 自动生成基于标准OpenAPIv3协议的接口文档
  • 自动生成SwaggerUI页面
  • 更多详细介绍:路由注册-规范路由

4、全错误堆栈特性

  • 框架层面所做的重大决定
  • 框架 所有 组件错误均支持错误堆栈
  • 详细介绍:全错误堆栈设计

5、全新错误码特性

  • 采用接口化设计,扩展性高
  • 提供可供选择的常见错误码
  • 框架核心组价底层已增加错误码支持,例如根据error中的错误码可以识别是否DB执行错误
  • 更多详细介绍:错误处理-错误码特性

6、组件接口化设计

  • 自顶向下统一化的接口化设计
  • 核心组件均采用接口化设计
  • 更高的扩展性、可定制性
  • 更多详细介绍:接口化与泛型设计

7、框架泛型的支持

  • 什么是框架gvar泛型?
  • 框架gvar泛型在框架核心组件中的大量使用
  • 框架gvar泛型的重要价值
  • 为什么不建议在顶层业务中使用泛型
  • 更多详细介绍:接口化与泛型设计

8、ORM的大量改进

9、其他重要改进

1)日志组件Handler特性

  • 采用中间件设计
  • 支持多个Handler处理
  • 为开发者自定义日志处理提供了更灵活强大的支持
  • 更多详细介绍:日志组件-Handler

2)日志组件颜色打印

  • 在终端中默认输出颜色打印
  • 默认不同级别不同的颜色,可配置
  • 输出到文件/自定义Writer默认关闭,可通过相关配置开启
  • 更多详细介绍:日志组件-颜色打印

4)调试模式介绍完善

二、功能改进

1、数据组件

  1. /database/gdb
    1. 废弃Table方法,统一使用Model方法创建Model对象。
    2. 废弃Model中的Struct/Structs方法,统一使用Scan方法执行查询结果到Struct对象/对象数组映射转换:ORM查询-Scan
    3. 废弃BatchInsert/BatchReplace/BatchSave方法,统一使用Insert/Replace/Save方法实现,内部自动实现参数类型识别采用单条写入还是批量写入:ORM链式操作-写入保存
    4. 增加DoFilter接口方法,用于ORM提交执行SQL&Args到底层driver之前的SQL&Args自定义过滤:ORM接口开发-回调处理
    5. 增加DoCommit接口方法,用于ORM提交执行SQL&Args到底层driver之前的自定义处理:https://
    6. 增加ConvertDataForRecord接口方法,用于自定义的数据转换处理。ORM接口开发-回调处理
    7. 增加Raw方法,用于通过原始SQL语句构建Model对象,随后可以使用Model的链式操作以及各种特性:ORM链式操作-模型创建
    8. 增加Handler特性,用于自定义的Model对象修改,并返回新的Model对象,可轻松地复用常见的逻辑ORM链式操作-Handler特性
    9. 增加Union/UnionAll特性,用于多条SQL/Model的查询结果合并:ORM查询-Union/UnionAll
    10. 增加With特性对条件查询以及 排序 语句的配置支持:模型关联-With特性
    11. 增加OnDuplicate/OnDuplicateEx方法,用于指定Save方法的更新/不更新字段:ORM链式操作-写入保存
    12. 增加Wheref/WhereOrf方法,用于带有格式化字符串语句的条件传递:ORM查询-Where/WhereOr/WhereNot
    13. 增加WhereLT/WhereLTE/WhereGT/WhereGTE以及WhereOrLT/WhereOrLTE/WhereOrGT/WhereOrGTE方法,用以为ORM添加常见的比较条件:https://
    14. 增加WherePrefix/WhereOrPrefix方法,用以在为条件字段加上表前缀,常用于关联查询中:https://
    15. 增加FieldsPrefix/FieldsExPrefix方法,用于为查询的字段增加自定义的表前缀,常用于关联查询中:https://
    16. 增加FieldsCount/FieldsSum/FieldsMin/FieldsMax/FieldsAvg方法,用于增加常见的统一查询条件:https://
    17. 增加LeftJoinOnField/RightJoinOnField/InnerJoinOnField方法,用于便捷关联带有相同字段名称的表:https://
    18. 增加OmitEmptyWhere/OmitEmptyData方法,用于特定过滤Where条件和Data数据中的空值数据:ORM链式操作-字段过滤
    19. 增加OmitNil/OmitNilWhere/OmitNilData方法,用于特定过滤Where条件和Data数据中的nil数据:ORM链式操作-字段过滤
    20. 增加TimeZone配置项,用于数据库查询的自定义时区转换(目前支持mysql/pgsql):ORM使用配置
    21. 改进Cache缓存特性,支持增加准确的缓存参数控制:https://
    22. 增加Close方法,用于手动关闭数据库连接:https://
    23. 去掉ORM在使用没有自定义配置时默认100连接数的配置限制。
    24. 改进时间维护特性,不再自动过滤开发者提交的CreatedAt/UpdatedAt/DeletedAt相关参数,意味着开发者可以在ORM操作中自定义相关时间字段的更新。
    25. 改进数据库执行的 SQL 日志记录,增加影响行数记录:https://
    26. 接口方法HandleSqlBeforeCommit名称修改为了DoCommit
    27. 数据库方法操作统一增加context.Context作为第一必须参数。
    28. 修复gdb组件的With特性多层级查询失效问题。
    29. 删除查询结果类型Record/Result的所有已废弃的方法。
    30. 单元测试完善。
  2. /database/gredis
    1. 采用适配器模式,以接口化设计重构该组件,以提高扩展性:Redis-接口化设计

    2. 默认提供基于第三方goredis包的适配器实现,增加了对Redis集群的支持:Redis-配置管理
    3. 由于集群特性的支持,配置文件格式发生改变:Redis-配置管理

2、网络组件

  1. /net/ghttp
    1. 新增路由注册方式:路由注册-规范路由
    2. 默认将Request对象注入到ctx上下文对象中,并增加RequestFromCtx/g.RequestFromCtx方法获取ctx中的Request对象。
    3. Client功能特性进行抽离,封装为gclient组件:HTTPClient
    4. Server日志增加对ctx上下文链路信息打印的支持,并改进日志格式:链路跟踪
    5. 参数获取返回统一使用*gvar.Var泛型对象。
    6. 废弃ghttp中相关的HTTP Client直接操作方法,必须通过创建Client对象来实现客户端访问操作。
    7. 废弃Controller路由注册方式,并删除相关实现逻辑代码。
  2. /net/gtrace
    1. 升级go.opentelemetry.io/otel到最新的正式版。
    2. 完善全新的链路跟踪使用文档:链路跟踪

3、系统组件

  1. /os/glog
    1. 为推进可观测性特性,落实链路跟踪规范,所有日志打印方法均增加context.Context参数。
    2. 日志组件增加了Handler特性,采用中间件设计、支持多个Handler处理,为开发者自定义日志处理提供了更灵活强大的支持:日志组件-Handler
    3. 日志组件增加了对内容的颜色打印特性支持,在终端中默认输出颜色打印,输出到文件/自定义Writer默认关闭、可通过相关配置开启:日志组件-颜色打印
    4. 废弃Println方法。
    5. 文档更新:日志组件
  2. /os/gres
    1. 新增Export方法用于将资源组件中的文件导出到本地磁盘:资源管理-方法介绍
  3. /os/gfile
    1. 新增SizeFormat方法用于获取指定文件格式化后的大小字符串。
    2. 文档更新:文件管理-gfile
  4. /os/gcache
    1. 采用适配器模式,以接口化设计重构该组件,以提高扩展性:缓存管理-接口化设计
    2. 默认提供了基于进程内存的缓存实现:缓存管理-内存缓存
    3. 所有操作方法增加了context.Context上下文参数。
    4. 参数获取返回统一使用*gvar.Var泛型对象。
    5. 增加Must*方法,用以直接获取参数并在产生错误时直接panic
  5. /os/gcfg
    1. 采用适配器模式,以接口化设计重构该组件,以提高扩展性:配置管理-接口化设计
    2. 默认提供了基于文件系统的配置管理实现:配置管理
    3. 参数获取返回统一使用*gvar.Var泛型对象。
    4. 所有操作方法增加了context.Context上下文参数。
    5. 增加GetWithEnv方法,当配置适配器中无法查找到对应的参数时,将会自动读取环境变量中的相应参数:配置管理-配置读取
    6. 增加GetWithCmd方法,当配置适配器中无法查找到对应的参数时,将会自动读取命令行参数中的相应参数:配置管理-配置读取
    7. 增加Must*方法,用以直接获取参数并在产生错误时直接panic
    8. 配置组件易用性改进,通过单例对象访问配置组件将会按照toml/yaml/yml/json/ini/xml文件后缀自动检索配置文件:配置管理
  6. /os/gcmd
    1. 参数获取返回统一使用*gvar.Var泛型对象。
    2. 全新的多层级命令行管理方式,支持自动生成命令行使用提示:命令管理-命令行对象
    3. 增加基于对象的命令行管理方式,更适合大量的终端命令场景:命令管理-结构化参数
  7. /os/genv
    1. 参数获取返回统一使用*gvar.Var泛型对象。
  8. /os/gcron
    1. 定时任务方法定义增加context.Context参数。
    2. 所有创建定时任务方法增加context.Context参数。
    3. 文档更新:定时任务-gcron
  9. /os/gtime
    1. 废弃Second/Millisecond/Microsecond/Nanosecond包方法,使用Timestamp/TimestampMilli/TimestampMicro/TimestampNano方法替代。
    2. 文档更新:时间管理-gtime
  10. /os/gtimer
    1. 定时器方法定义增加context.Context参数。
    2. 所有创建定时器方法增加context.Context参数。
    3. 改进基于优先级队列数据结构存储的定时任务执行检测机制,提高执行性能。
    4. 文档更新:定时器-gtimer
  11. /os/grpool
    1. 回调方法定义增加context.Context参数。
    2. goroutine池任务添加方法增加context.Context参数。
    3. 文档更新:协程管理-grpool
  12. /os/gsession
    1. gsession.Storage接口增加ctx上下文参数输输入,用于承接上下文信息、实现完整的链路跟踪。并未保证严谨性增加error返回参数:Session
    2. 参数获取返回统一使用*gvar.Var泛型对象。
  13. /os/gview
    1. 模板解析方法统一增加context.Context参数。
    2. 增加plus/minus/times/divide四则运算内置模板方法。
    3. 文档更新:模板引擎
  14. /os/gstructs
    1. 将框架internal中的structs包开放,命名为gstructs,用于struct反射操作的高级使用包:对象信息-gstructs

4、错误处理

  1. /errors/gerror
    1. 增加Message方法,用于获取指定错误码的错误信息。
    2. 增加CodeMessage方法,用于获取指定错误的错误码信息。
    3. 增加NewOption方法,用于自定义配置的错误对象创建,献给框架高级玩家。
    4. 增加HasStack方法,用于判断给定的error接口对象是否实现(包含)了堆栈信息。
    5. 错误码从整型改为接口对象,以实现可定制性并提高可扩展性,详情参考gcode组件介绍:错误处理-错误码特性
    6. 提高易用性,改进NewCode/NewCodeSkip/WrapCode/WrapCodeSkip方法,调增text输入参数为非必须,默认使用对应错误码的Message信息。
  2. /errors/gcode
    1. 增加gcode错误码组件,提供可定制型和扩展性极强的错误码管理,结合gerror组件实现强大的错误处理:错误处理-错误码使用

5、其他组件

  1. /container/garray
    1. 各数组类型统一增加At方法,用于直接获取返回索引位置的数据。
    2. 文档更新:数组类型-方法介绍
  2. /debug/gdebug
    1. 增加TestDataContent方法,用于直接获取测试包下testdata目录下指定路径文件内容。
    2. 文档更新:调试功能-gdebug
  3. /encoding/gjson
    1. 废弃大部分的Get*方法,统一使用Get方法获取指定pattern的内容,并统一返回*gvar.Var泛型对象,开发者根据业务场景自行通过对应方法便捷转换为特定类型变量。
    2. 增加若干Must*方法。
    3. 使用文档全面更新:https://
  4. /frame/g
    1. 增加ModelRaw方法,用于便捷创建基于原生SQL的数据库Model对象。
    2. 为通过/frame/g模块创建的ORM对象增加logger配置,通过自动读取配置文件,自动初始化:ORM使用配置
    3. 为通过/frame/g模块创建的Server对象增加logger配置,通过自动读取配置文件,自动初始化:服务配置
  5. /frame/gmvc
    1. 标记废除gmvc耦合模块,未来不再进一步支持。
  6. /util/gutil
    1. 改进实现Dump方法,不再使用json包实现类型打印,而是自实现了对任意类型的打印特性,并且支持打印详细的数据类型:工具方法-gutil
    2. 增加SliceToMapWithColumnAsKey方法,用以将Slice按照一定规则转换为Map
  7. /utils/gvalid
    1. 增加bail校验规则,以及Bail链式操作方法,用以在数据校验不通过时直接退出校验,不再执行后续校验规则。
    2. 增加datetime校验规则,用以校验常用日期时间类型,其中日期之间支持的连接符号只支持-,格式如:2006-01-02 12:00:00
    3. 去掉包校验方法,统一使用链式操作实现数据校验。
    4. 所以校验方法增加context.Context参数。
    5. 全新、超完善的数据校验组件使用文档:数据校验

其他大量的改进细节,这里不再赘述,感兴趣的小伙伴可参阅官网 goframe.org

三、CLI工具链 

  1. 采用全新gcmd命令行对象封装重构实现。
  2. 改进init命令,支持SingleRepo/MonoRepo两种仓库初始化。并且项目初始化不再依赖远端仓库。
  3. 改进gen dao命令,采用全新的V2工程化设计,自动生成entity/dao/dto代码文件。
  4. 去掉update命令,工具的更新统一走 https://github.com/gogf/gf-cli
  5. 去掉get命令。
  6. 全新文档:开发工具

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Game Programming Patterns

Game Programming Patterns

Robert Nystrom / Genever Benning / 2014-11-2 / USD 39.95

The biggest challenge facing many game programmers is completing their game. Most game projects fizzle out, overwhelmed by the complexity of their own code. Game Programming Patterns tackles that exac......一起来看看 《Game Programming Patterns》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具