我们很高兴宣布`GoFrame`迎来了`v2.8.0`正式版本的发布! 本次更新带来了重要的改进和新特性,使`GoFrame`在开发效率、执行性能、稳定性和扩展性方面取得了显著提升。
版本亮点[](about:blank#%E7%89%88%E6%9C%AC%E4%BA%AE%E7%82%B9 "版本亮点的直接链接")
---------------------------------------------------------------------
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/ghttp` 和 `net/gudp` 网络服务组件优化了参数配置和请求处理逻辑,为用户提供更简洁的开发体验。
3. **开发工具升级**
* `gf init` 命令支持生成单仓多应用项目结构。
* `gf gen ctrl`、`gf gen dao` 和 `gf run` 等命令的优化,进一步增强了代码生成的灵活性与执行效率,简化了项目搭建流程。
4. **社区组件支持**
* 为 `contrib/drivers/mssql` 和 `contrib/registry/etcd` 等多个社区驱动增加了对最新功能的支持,提升了与外部服务集成的便捷性。
未来展望[](about:blank#%E6%9C%AA%E6%9D%A5%E5%B1%95%E6%9C%9B "未来展望的直接链接")
---------------------------------------------------------------------
`GoFrame`团队感谢每一位社区用户的支持。 我们将继续倾听社区反馈,为用户提供更丰富的功能和更高效的开发支持。
特别致谢[](about:blank#%E7%89%B9%E5%88%AB%E8%87%B4%E8%B0%A2 "特别致谢的直接链接")
---------------------------------------------------------------------
💖💖💖 感谢所有参与本次版本的贡献开发者们 💖💖💖
![alt text](https://goframe.org/assets/images/QQ_1731813654454-08345d440004047096b61b5037ded944.png)
主要内容
====
本次版本变更内容较多,以下为本次版本的主要内容,详细的`Change Log`请参考: [https://github.com/gogf/gf/releases/tag/v2.8.0](https://github.com/gogf/gf/releases/tag/v2.8.0)
完整的代码变更请参考:[https://github.com/gogf/gf/compare/v2.7.0...v2.8.0](https://github.com/gogf/gf/compare/v2.7.0...v2.8.0)
兼容提示[](about:blank#%E5%85%BC%E5%AE%B9%E6%8F%90%E7%A4%BA "兼容提示的直接链接")
---------------------------------------------------------------------
1. 最低`Golang`版本要求从`1.18`调整为了`1.20`。
2. 组件`container/gring`标记废弃,未来不再继续维护。
3. 组件`contrib/trace/jaeger`已从源码仓库删除。
4. 组件`encoding/gjson`的`Load*`方法参数,从`interface{}`调整为了`[]byte`参数,以提高性能。
5. 组件`net/ghttp`的`StartPProfServer`方法端口参数从`port int`调整为了`address string`以提高灵活性。
6. 组件`net/gudp`重构,个别方法参数有调整:[UDP组件](https://goframe.org/docs/components/network-gudp)
组件改进[](about:blank#%E7%BB%84%E4%BB%B6%E6%94%B9%E8%BF%9B "组件改进的直接链接")
---------------------------------------------------------------------
1. `database/gdb`
* 时间维护特性增加对整型字段的支持,当`created_at/updated_at/deleted_at`为整型字段时,将使用时间戳更新该字段,详见:[ORM链式操作-时间维护](https://goframe.org/docs/core/gdb-chaining-soft-time)
* 新增`Model.Exist`方法,用于判断满足所给条件的数据是否存在:[ORM查询-Exist](https://goframe.org/docs/core/gdb-chaining-query-exist)
* 新增对数据库`time/year`字段类型的支持:[ORM高级特性-类型识别](https://goframe.org/docs/core/gdb-senior-type-recognization)
* 新增`OrderRandomFunction`接口方法,并为常用数据库实现并支持了`OrderRandom`排序方法。
* 改进`Model.Fields`方法,增加对`gdb.Raw`类型参数的支持:[ORM链式操作-字段获取](https://goframe.org/docs/core/gdb-chaining-fields-retrieving)
* 改进`With`特性中的`orm`标签,增加对`unscoped`的支持:[模型关联-静态关联-With特性](https://goframe.org/docs/core/gdb-chaining-relation-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`
* 使用第三方数据结构组件`github.com/emirpasic/gods`重构`gtree`实现,以提高可扩展性,利于维护。
5. `encoding/gjson`
* `Load*`方法参数,从`interface{}`调整为了`[]byte`参数,以提高性能。
6. `os/gcron`
* 新增`StopGracefully`方法,用于等待当前正在执行的定时任务完成后再停止定时任务:[定时任务-基本使用](https://goframe.org/docs/components/os-gcron-example)
7. `os/gfsnotify`
* 改进文件递归监听实现,当监听目录时,如果后续在目录中创建子级目录,或者子级目录的子级目录,以此类推,也将会被递归监听:[文件监控-gfsnotify](https://goframe.org/docs/components/os-gfsnotify)
8. `test/gtest`
* 改进`AssertIN/AssertNI`断言方法,增加对字符串子串的包含断言支持。
9. `util/gvalid`
* 新增`required-if-all`校验规则,所有指定的参数和对应的数值相等时,该参数为必须参数:[数据校验-校验规则](https://goframe.org/docs/core/gvalid-rules)
* 改进`phone`校验规则,增加对`171`系列手机号码的验证支持。
10. `util/gconv`
* 使用类型缓存提升转换性能,针对复杂数据类型的转换性能提升约`300%`。
社区组件[](about:blank#%E7%A4%BE%E5%8C%BA%E7%BB%84%E4%BB%B6 "社区组件的直接链接")
---------------------------------------------------------------------
1. `drivers/mssql`
* 基础`driver`从`github.com/denisenkom/go-mssqldb`改为了官方组件`github.com/microsoft/go-mssqldb`。
2. `contrib/drivers/pgsql`
* 增加`InsertIgnore`操作支持。
* 增加对`Golang`数组类型到数据库数组字段类型操作的支持。
3. `contrib/registry/etcd`
* 增加`DialTimeout`及`AutoSyncInterval`配置项。
4. `contrib/registry/nacos`
* 使用官方组件依赖`github.com/nacos-group/nacos-sdk-go/v2`替换掉`github.com/joy999/nacos-sdk-go`
5. `contrib/rpc/grpcx`
* 去掉了链路跟踪`trace`信息中的请求/返回数据内容,以减少`trace`包大小。
* 由于`grpc`组件已启用`grpc.Dial`方法,这里使用`grpc.NewClient`替换掉了`grpc.Dial`。
6. `contrib/sdk/httpclient`
* 新增`Handler`接口,允许使用者自定义处理`HTTP Client`返回数据。
开发工具[](about:blank#%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7 "开发工具的直接链接")
---------------------------------------------------------------------
1. 改进`gf init`命令,新增`-a/monoApp`选项,用于在大仓下新创建应用项目模板:[项目创建-init](https://goframe.org/docs/cli/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](https://goframe.org/docs/cli/gen-dao)
* 整型字段如果长度为`1`,例如:`bit(1)/tinyint(1)/int(1)`,那么自动识别生成为`bool`类型的`Golang`数据类型。
* 自动读取生成代码文件的目录名称,作为生成的`dao/do/entity`文件的包名称。
* 由于`dm`数据库限制了`cli`支持的平台,因此`cli`去掉了对`dm`数据库的默认支持,若有需要请手动修改源码安装`cli`。
* 修复传递`link`参数和配置文件同时存在的场景下,`link`参数失效问题。
本文转自 [https://goframe.org/release/v2.8](https://goframe.org/release/v2.8),如有侵权,请联系删除。
有疑问加站长微信联系(非本文作者))