GoFrame v2.8.0 发布:更高效、更强大,兼容性与性能全面提升

93 天前
johng  johng

我们很高兴宣布GoFrame迎来了v2.8.0正式版本的发布! 本次更新带来了重要的改进和新特性,使GoFrame在开发效率、执行性能、稳定性和扩展性方面取得了显著提升。

版本亮点

  1. 兼容性更新

    • GoFrame v2.8.0要求最低 Golang 版本为 1.20,提供更高效的性能和稳定性。
    • container/gring 组件已被废弃,同时 contrib/trace/jaeger 组件从源码仓库移除,简化了依赖管理。
  2. 组件改进

    • database/gdb模块现在支持created_at/updated_at/deleted_at整型时间戳字段、unix socket连接、time/year 字段类型,并增加了 Model.Exist 方法,显著提升了数据库操作的灵活性和效率。
    • util/gconv组件使用类型缓存提升转换性能,针对复杂数据类型的转换性能提升约300%
    • net/ghttpnet/gudp 网络服务组件优化了参数配置和请求处理逻辑,为用户提供更简洁的开发体验。
  3. 开发工具升级

    • gf init 命令支持生成单仓多应用项目结构。
    • gf gen ctrlgf gen daogf run 等命令的优化,进一步增强了代码生成的灵活性与执行效率,简化了项目搭建流程。
  4. 社区组件支持

    • contrib/drivers/mssqlcontrib/registry/etcd 等多个社区驱动增加了对最新功能的支持,提升了与外部服务集成的便捷性。

未来展望

GoFrame团队感谢每一位社区用户的支持。 我们将继续倾听社区反馈,为用户提供更丰富的功能和更高效的开发支持。

特别致谢

💖💖💖 感谢所有参与本次版本的贡献开发者们 💖💖💖

alt text

主要内容

本次版本变更内容较多,以下为本次版本的主要内容,详细的Change Log请参考: https://github.com/gogf/gf/releases/tag/v2.8.0

完整的代码变更请参考:https://github.com/gogf/gf/compare/v2.7.0...v2.8.0

兼容提示

  1. 最低Golang版本要求从1.18调整为了1.20
  2. 组件container/gring标记废弃,未来不再继续维护。
  3. 组件contrib/trace/jaeger已从源码仓库删除。
  4. 组件encoding/gjsonLoad*方法参数,从interface{}调整为了[]byte参数,以提高性能。
  5. 组件net/ghttpStartPProfServer方法端口参数从port int调整为了address string以提高灵活性。
  6. 组件net/gudp重构,个别方法参数有调整:UDP 组件

组件改进

  1. database/gdb
    • 时间维护特性增加对整型字段的支持,当created_at/updated_at/deleted_at为整型字段时,将使用时间戳更新该字段,详见:ORM 链式操作-时间维护
    • 新增Model.Exist方法,用于判断满足所给条件的数据是否存在:ORM 查询-Exist
    • 新增对数据库time/year字段类型的支持:ORM 高级特性-类型识别
    • 新增OrderRandomFunction接口方法,并为常用数据库实现并支持了OrderRandom排序方法。
    • 改进Model.Fields方法,增加对gdb.Raw类型参数的支持:ORM 链式操作-字段获取
    • 改进With特性中的orm标签,增加对unscoped的支持:模型关联-静态关联-With 特性
    • 配置文件增加对unix socket本地数据库服务连接的支持。
    • 去掉链路跟踪trace信息中的sql语句,以减少trace包大小。
    • 改进查询结果到struct的转换性能。
  2. net/ghttp
    • 取消了规范路由注册中对输入输出对象的XxxReq/XxxRes命名限制。
    • StartPProfServer的端口参数从port int调整为了address string以提高灵活性。
    • 去掉了链路跟踪trace信息中的请求/返回数据内容,以减少trace包大小。
    • 修复/debug/admin/shutdown接口关闭Server时的优雅关闭问题。
  3. net/goai
    • 允许在请求/返回结构体属性中通过type标签指定参数的类型。
  4. container/gtree
  5. encoding/gjson
    • Load*方法参数,从interface{}调整为了[]byte参数,以提高性能。
  6. os/gcron
    • 新增StopGracefully方法,用于等待当前正在执行的定时任务完成后再停止定时任务:定时任务-基本使用
  7. os/gfsnotify
    • 改进文件递归监听实现,当监听目录时,如果后续在目录中创建子级目录,或者子级目录的子级目录,以此类推,也将会被递归监听:文件监控-gfsnotify
  8. test/gtest
    • 改进AssertIN/AssertNI断言方法,增加对字符串子串的包含断言支持。
  9. util/gvalid
    • 新增required-if-all校验规则,所有指定的参数和对应的数值相等时,该参数为必须参数:数据校验-校验规则
    • 改进phone校验规则,增加对171系列手机号码的验证支持。
  10. util/gconv * 使用类型缓存提升转换性能,针对复杂数据类型的转换性能提升约300%

社区组件

  1. drivers/mssql
  2. contrib/drivers/pgsql
    • 增加InsertIgnore操作支持。
    • 增加对Golang数组类型到数据库数组字段类型操作的支持。
  3. contrib/registry/etcd
    • 增加DialTimeoutAutoSyncInterval配置项。
  4. contrib/registry/nacos
  5. contrib/rpc/grpcx
    • 去掉了链路跟踪trace信息中的请求/返回数据内容,以减少trace包大小。
    • 由于grpc组件已启用grpc.Dial方法,这里使用grpc.NewClient替换掉了grpc.Dial
  6. contrib/sdk/httpclient
    • 新增Handler接口,允许使用者自定义处理HTTP Client返回数据。

开发工具

  1. 改进gf init命令,新增-a/monoApp选项,用于在大仓下新创建应用项目模板:项目创建-init
  2. 改进gf pack命令,新增对命令参数选项的配置文件支持,配置项路径为gfcli.pack
  3. 改进gf tpl命令,新增对命令参数选项的配置文件支持,配置项路径为gfcli.tpl.parse
  4. 改进gf gen ctrl命令,使用AST重新实现解析逻辑,提高生成Go代码文件内容的准确性,并提升该功能的可扩展性。
  5. 改进gf run命令:
    • 新增对命令参数选项的配置文件支持,配置项路径为gfcli.run
    • 在临时的子进程结束时,如新进程替换老进程时,自动删除临时的老进程二进制文件。
  6. 改进gf gen dao命令:
    • 增加field mapping特性,支持对指定字段配置生成的Golang数据类型:数据规范-gen dao
    • 整型字段如果长度为1,例如:bit(1)/tinyint(1)/int(1),那么自动识别生成为bool类型的Golang数据类型。
    • 自动读取生成代码文件的目录名称,作为生成的dao/do/entity文件的包名称。
    • 由于dm数据库限制了cli支持的平台,因此cli去掉了对dm数据库的默认支持,若有需要请手动修改源码安装cli
    • 修复传递link参数和配置文件同时存在的场景下,link参数失效问题。
2540 次点击
所在节点    Go 编程语言
16 条回复
iBenlim
93 天前
强烈推荐,文档齐全,框架熟悉后,开发效率非常高!👍
lanisle
93 天前
这……Changelog 发这?
Macrow
93 天前
👍用过,好评!
4Et5ShxMIq58n6Lr
93 天前
尝试了下,非常适合我这初学者,只管写业务即可!挺不错的!
CodeCodeStudy
93 天前
路由使用得不够方便
edcopclub
93 天前
规范路由中强制 Req,Res ,对于一个框架来说感觉确实不合适。
ninjashixuan
92 天前
orm postgresql 支持不够好,希望完善一下,比如自增主键还要手动调用 OmitEmpty 函数以及批量插入时要 FieldsEx id 字段 ,上面提到的路由注册和 middleware 不够灵活, 路由 rewrite 的方式 不如常规框架在绑定 handler 时灵活的添加 middleware 。
ninjashixuan
92 天前
夸一夸提供的工具库,写业务效率确实高。
lexno
88 天前
@ninjashixuan 如果用 gf gen dao 生成的话,会有一个 do 的包,使用那个包里面的结构体就不需要每次手动调用 OmitEmpty 函数了
ninjashixuan
88 天前
@lexno do 字段都是 any ,entity 字段有类型,都用 do 的话丧失类型检查了。明显 insert 用 entity 更可靠,更新用 do 更灵活。
johng
86 天前
@edcopclub 确实,之前有限制,根据社区反馈,已经修正了。希望大家一起参与贡献。
johng
86 天前
@ninjashixuan do 这个包,各有利弊吧。
johng
86 天前
@lanisle 听说这里大佬多,不发这,怕大佬们不知道啊。
johng
86 天前
@iBenlim 谢谢,欢迎感兴趣的朋友一起共建。
johng
86 天前
@CodeCodeStudy goframe 的路由功能是比较强大的,如果不满意的地方可以提 issue ,由于是开源项目,大家也可以提 pr 一起参与共建哈。
CodeCodeStudy
86 天前
@johng #15 有没有考虑用注解写路由,就像 spring boot 那样的,让路由和控制器方法更加紧密

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1091125

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX