我们很高兴宣布GoFrame
迎来了v2.8.0
正式版本的发布! 本次更新带来了重要的改进和新特性,使GoFrame
在开发效率、执行性能、稳定性和扩展性方面取得了显著提升。
兼容性更新
GoFrame v2.8.0
要求最低 Golang
版本为 1.20
,提供更高效的性能和稳定性。container/gring
组件已被废弃,同时 contrib/trace/jaeger
组件从源码仓库移除,简化了依赖管理。组件改进
database/gdb
模块现在支持created_at/updated_at/deleted_at
整型时间戳字段、unix socket
连接、time/year
字段类型,并增加了 Model.Exist
方法,显著提升了数据库操作的灵活性和效率。util/gconv
组件使用类型缓存提升转换性能,针对复杂数据类型的转换性能提升约300%
。net/ghttp
和 net/gudp
网络服务组件优化了参数配置和请求处理逻辑,为用户提供更简洁的开发体验。开发工具升级
gf init
命令支持生成单仓多应用项目结构。gf gen ctrl
、gf gen dao
和 gf run
等命令的优化,进一步增强了代码生成的灵活性与执行效率,简化了项目搭建流程。社区组件支持
contrib/drivers/mssql
和 contrib/registry/etcd
等多个社区驱动增加了对最新功能的支持,提升了与外部服务集成的便捷性。GoFrame
团队感谢每一位社区用户的支持。 我们将继续倾听社区反馈,为用户提供更丰富的功能和更高效的开发支持。
💖💖💖 感谢所有参与本次版本的贡献开发者们 💖💖💖
本次版本变更内容较多,以下为本次版本的主要内容,详细的Change Log
请参考: https://github.com/gogf/gf/releases/tag/v2.8.0
完整的代码变更请参考:https://github.com/gogf/gf/compare/v2.7.0...v2.8.0
Golang
版本要求从1.18
调整为了1.20
。container/gring
标记废弃,未来不再继续维护。contrib/trace/jaeger
已从源码仓库删除。encoding/gjson
的Load*
方法参数,从interface{}
调整为了[]byte
参数,以提高性能。net/ghttp
的StartPProfServer
方法端口参数从port int
调整为了address string
以提高灵活性。net/gudp
重构,个别方法参数有调整:UDP 组件database/gdb
created_at/updated_at/deleted_at
为整型字段时,将使用时间戳更新该字段,详见:ORM 链式操作-时间维护Model.Exist
方法,用于判断满足所给条件的数据是否存在:ORM 查询-Existtime/year
字段类型的支持:ORM 高级特性-类型识别OrderRandomFunction
接口方法,并为常用数据库实现并支持了OrderRandom
排序方法。Model.Fields
方法,增加对gdb.Raw
类型参数的支持:ORM 链式操作-字段获取With
特性中的orm
标签,增加对unscoped
的支持:模型关联-静态关联-With 特性unix socket
本地数据库服务连接的支持。trace
信息中的sql
语句,以减少trace
包大小。struct
的转换性能。net/ghttp
XxxReq/XxxRes
命名限制。StartPProfServer
的端口参数从port int
调整为了address string
以提高灵活性。trace
信息中的请求/返回数据内容,以减少trace
包大小。/debug/admin/shutdown
接口关闭Server
时的优雅关闭问题。net/goai
type
标签指定参数的类型。container/gtree
github.com/emirpasic/gods
重构gtree
实现,以提高可扩展性,利于维护。encoding/gjson
Load*
方法参数,从interface{}
调整为了[]byte
参数,以提高性能。os/gcron
StopGracefully
方法,用于等待当前正在执行的定时任务完成后再停止定时任务:定时任务-基本使用os/gfsnotify
test/gtest
AssertIN/AssertNI
断言方法,增加对字符串子串的包含断言支持。util/gvalid
required-if-all
校验规则,所有指定的参数和对应的数值相等时,该参数为必须参数:数据校验-校验规则phone
校验规则,增加对171
系列手机号码的验证支持。util/gconv
* 使用类型缓存提升转换性能,针对复杂数据类型的转换性能提升约300%
。drivers/mssql
driver
从github.com/denisenkom/go-mssqldb
改为了官方组件github.com/microsoft/go-mssqldb
。contrib/drivers/pgsql
InsertIgnore
操作支持。Golang
数组类型到数据库数组字段类型操作的支持。contrib/registry/etcd
DialTimeout
及AutoSyncInterval
配置项。contrib/registry/nacos
contrib/rpc/grpcx
trace
信息中的请求/返回数据内容,以减少trace
包大小。grpc
组件已启用grpc.Dial
方法,这里使用grpc.NewClient
替换掉了grpc.Dial
。contrib/sdk/httpclient
Handler
接口,允许使用者自定义处理HTTP Client
返回数据。gf init
命令,新增-a/monoApp
选项,用于在大仓下新创建应用项目模板:项目创建-initgf pack
命令,新增对命令参数选项的配置文件支持,配置项路径为gfcli.pack
。gf tpl
命令,新增对命令参数选项的配置文件支持,配置项路径为gfcli.tpl.parse
。gf gen ctrl
命令,使用AST
重新实现解析逻辑,提高生成Go
代码文件内容的准确性,并提升该功能的可扩展性。gf run
命令:gfcli.run
。gf gen dao
命令:field mapping
特性,支持对指定字段配置生成的Golang
数据类型:数据规范-gen dao1
,例如:bit(1)/tinyint(1)/int(1)
,那么自动识别生成为bool
类型的Golang
数据类型。dao/do/entity
文件的包名称。dm
数据库限制了cli
支持的平台,因此cli
去掉了对dm
数据库的默认支持,若有需要请手动修改源码安装cli
。link
参数和配置文件同时存在的场景下,link
参数失效问题。 1
iBenlim 8 天前 1
强烈推荐,文档齐全,框架熟悉后,开发效率非常高!👍
|
2
lanisle 8 天前 2
这……Changelog 发这?
|
3
Macrow 8 天前 1
👍用过,好评!
|
4
laobobo 8 天前 1
尝试了下,非常适合我这初学者,只管写业务即可!挺不错的!
|
5
CodeCodeStudy 8 天前
路由使用得不够方便
|
6
edcopclub 8 天前 via Android
规范路由中强制 Req,Res ,对于一个框架来说感觉确实不合适。
|
7
ninjashixuan 7 天前
orm postgresql 支持不够好,希望完善一下,比如自增主键还要手动调用 OmitEmpty 函数以及批量插入时要 FieldsEx id 字段 ,上面提到的路由注册和 middleware 不够灵活, 路由 rewrite 的方式 不如常规框架在绑定 handler 时灵活的添加 middleware 。
|
8
ninjashixuan 7 天前
夸一夸提供的工具库,写业务效率确实高。
|
9
lexno 3 天前
@ninjashixuan 如果用 gf gen dao 生成的话,会有一个 do 的包,使用那个包里面的结构体就不需要每次手动调用 OmitEmpty 函数了
|
10
ninjashixuan 3 天前
@lexno do 字段都是 any ,entity 字段有类型,都用 do 的话丧失类型检查了。明显 insert 用 entity 更可靠,更新用 do 更灵活。
|
12
johng OP @ninjashixuan do 这个包,各有利弊吧。
|
15
johng OP @CodeCodeStudy goframe 的路由功能是比较强大的,如果不满意的地方可以提 issue ,由于是开源项目,大家也可以提 pr 一起参与共建哈。
|
16
CodeCodeStudy 18 小时 31 分钟前
@johng #15 有没有考虑用注解写路由,就像 spring boot 那样的,让路由和控制器方法更加紧密
|