-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Labels
featureplannedThis issue/proposal is planned into our next steps.This issue/proposal is planned into our next steps.wip
Description
Is your feature request related to a problem?
Option No
Describe the solution you'd like
这里记录一些非兼容性但确实值得改进的修改,便于未来评估是否值得作为大版本发布。
Describe alternatives you've considered
【设计】1. ORM
操作强制增加ctx
参数 ✅
目前ORM
的Model
操作并不强制需要ctx
参数,虽然可以通过dao
代码生成工具规范使用Ctx(ctx)
方法创建Model
对象,但这样不是很优雅。
同时ORM
组件内部处理ctx
性能不是很高效,ctx
参数作为DB
实现对象的属性保存了起来,如果作为方法参数传递,这样别扭的设计可以去掉,也可以简化逻辑处理。
【设计】2. http server slice
参数传递方式与标准库统一
http server
的slice
参数传递参考的是PHP
的习惯,通过k[]
的方式传递,这块需要参考golang
标准库实现,以便于更统一的Golang
处理逻辑。
【设计】3. gtime.Format
和标准库的time.Format
不一致 ✅
目前gtime.Format
参考的是PHP的时间格式化方式,但该方法与标准库的time.Format
冲突,建议改名。
【解耦】4. 完整废除gredis
组件
目前主库虽然已经通过接口化解耦了Redis
组件的设计,但是仍然耦合较重。需要完整删除gredis
组件,在主库使用Redis
的组件中(例如gcache
, gsession
)增加对应的接口定义,具体的实现还是通过社区组件的形式来提供,但是需要提供十分简化的接口定义。
【性能】5. 去掉对GET Body的支持
GET Body通常不需要传递参数,去掉去掉对GET Body的支持以提高性能。
【性能】6. 不再默认允许Request Body可重复读
保留现有的可重复读设置方法,用户若有需要可以通过中间件设置可重复读。
【性能】7. HTTP Server
仅支持Query String
及表单类型参数自动解析
服务端需要根据客户端提交的ContentType
来解析参数内容,客户端提交若无指定ContentType
,那么不再自动解析提交参数。
【设计、易用性】8. HTTP Client不再支持@file的特殊参数名称方式
通过提供明确的方法来管理客户端的文件上传功能,而不是通过参数前缀的方式。
【设计】9. gjson
组件需要明确职责仅作为json
的扩展组件,不再支持xml/yaml
等其他数据类型
- 可以考虑使用第三方的
gjson
组件,需要充分评估功能和性能对比。 - 若要支持其他数据类型,增加
gparser
组件,功能与现有gjson
功能类似,但需要做减法,不能提供太多别名方法。
【设计】10. 评估去掉gres
组件而直接使用embed.FS
的可能性
embed.FS
已被广泛使用,评估是否能直接替换到gres
,降低框架职责。
【性能】11. 去掉内置的链路跟踪中间件,改为用户配置
- 由用户选择接入链路跟踪,不再内置链路跟踪判断逻辑(
http/grpc client&server
)。 - 现有的内置的
traceid
功能通过中间件方式提供,由用户自行选择配置。
【设计】12. gtype
组件改为gatomic
以更好明确组件职责 ✅
【性能】13. orm
不再对参数中字段与表不存在字段做自动过滤功能,考虑让用户自定配置过滤策略
【性能】14. 评估去掉ORM的Safe
功能,让开发者使用Clone
功能来实现模型复用 ✅
【设计】15. 工具链所有生成的代码,默认加上.gen.go
的文件名后缀
Additional
No response
josephGuo
Metadata
Metadata
Assignees
Labels
featureplannedThis issue/proposal is planned into our next steps.This issue/proposal is planned into our next steps.wip