V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
johng
V2EX  ›  Go 编程语言

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

  •  1
     
  •   johng · 8 天前 · 1780 次点击

    我们很高兴宣布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参数失效问题。
    16 条回复    2024-11-28 09:31:38 +08:00
    iBenlim
        1
    iBenlim  
       8 天前   ❤️ 1
    强烈推荐,文档齐全,框架熟悉后,开发效率非常高!👍
    lanisle
        2
    lanisle  
       8 天前   ❤️ 2
    这……Changelog 发这?
    Macrow
        3
    Macrow  
       8 天前   ❤️ 1
    👍用过,好评!
    laobobo
        4
    laobobo  
       8 天前   ❤️ 1
    尝试了下,非常适合我这初学者,只管写业务即可!挺不错的!
    CodeCodeStudy
        5
    CodeCodeStudy  
       8 天前
    路由使用得不够方便
    edcopclub
        6
    edcopclub  
       8 天前 via Android
    规范路由中强制 Req,Res ,对于一个框架来说感觉确实不合适。
    ninjashixuan
        7
    ninjashixuan  
       7 天前
    orm postgresql 支持不够好,希望完善一下,比如自增主键还要手动调用 OmitEmpty 函数以及批量插入时要 FieldsEx id 字段 ,上面提到的路由注册和 middleware 不够灵活, 路由 rewrite 的方式 不如常规框架在绑定 handler 时灵活的添加 middleware 。
    ninjashixuan
        8
    ninjashixuan  
       7 天前
    夸一夸提供的工具库,写业务效率确实高。
    lexno
        9
    lexno  
       3 天前
    @ninjashixuan 如果用 gf gen dao 生成的话,会有一个 do 的包,使用那个包里面的结构体就不需要每次手动调用 OmitEmpty 函数了
    ninjashixuan
        10
    ninjashixuan  
       3 天前
    @lexno do 字段都是 any ,entity 字段有类型,都用 do 的话丧失类型检查了。明显 insert 用 entity 更可靠,更新用 do 更灵活。
    johng
        11
    johng  
    OP
       1 天前
    @edcopclub 确实,之前有限制,根据社区反馈,已经修正了。希望大家一起参与贡献。
    johng
        12
    johng  
    OP
       1 天前
    @ninjashixuan do 这个包,各有利弊吧。
    johng
        13
    johng  
    OP
       1 天前
    @lanisle 听说这里大佬多,不发这,怕大佬们不知道啊。
    johng
        14
    johng  
    OP
       1 天前
    @iBenlim 谢谢,欢迎感兴趣的朋友一起共建。
    johng
        15
    johng  
    OP
       1 天前
    @CodeCodeStudy goframe 的路由功能是比较强大的,如果不满意的地方可以提 issue ,由于是开源项目,大家也可以提 pr 一起参与共建哈。
    CodeCodeStudy
        16
    CodeCodeStudy  
       18 小时 31 分钟前
    @johng #15 有没有考虑用注解写路由,就像 spring boot 那样的,让路由和控制器方法更加紧密
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1083 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:03 · PVG 04:03 · LAX 12:03 · JFK 15:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.