Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: issue4092 #4097

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

fix: issue4092 #4097

wants to merge 7 commits into from

Conversation

wln32
Copy link
Member

@wln32 wln32 commented Jan 3, 2025

Fixes #4092 基础类型的切片数组,不再递归循环验证,防止一些基础类型切片容量过大导致内存泄漏,具体见issue

case reflect.Ptr:
// []*struct
// []*int
loop = true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 针对[]string, []int等基础类型也不支持了吗?这样会有兼容问题的。
  • 个人建议改进如下:
    • 针对太大块的提交内容,定义校验规则没有意义,建议使用侧去掉校验规则,
    • 组件增加对校验内容大小的限制,比如默认限制1K

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 针对[]string, []int等基础类型也不支持了吗?这样会有兼容问题的。

  • 个人建议改进如下:

    • 针对太大块的提交内容,定义校验规则没有意义,建议使用侧去掉校验规则,
    • 组件增加对校验内容大小的限制,比如默认限制1K
  1. 并不是注释那样,注释想说明的是当切片的元素类型为指针类型时,和原逻辑一样,需要循环逐个验证。
  2. 其实仅就目前的规则来说,只有一个foreach规则会对切片类型进行循环验证,实现在 gf\util\gvalid\gvalid_validator_check_value.go:145行开始
  3. 当切片元素类型非struct,map时,完全没有必要去循环验证
  4. 建议对gvalid文档增加一些说明,规则可以作用于哪些类型
  5. gvalid在性能方面可能不尽人意,相对于go-playground/validator来说有几十倍的差距.
  6. 在ghttp中关于验证部分的逻辑直接写死了gvalid,go的其他主流框架,都有开放自定义模型验证这方面的接口
  7. gvalid年久失修,在实现上也不易维护,建议抛弃掉现在的gvalid,改用go-playground/validator,或为框架提供一个可以自定义验证的接口

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

是不是可以开个issue讨论下重新设计gvalid和gconv,印象中在好几个issue中都有讨论gvalid和gconv的性能问题,或者使用现成的社区方案,通过适配器去适配那些不错的社区库

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

是不是可以开个issue讨论下重新设计gvalid和gconv,印象中在好几个issue中都有讨论gvalid和gconv的性能问题,或者使用现成的社区方案,通过适配器去适配那些不错的社区库

gconv应该不用了,之前我重新实现过了,现在性能不成问题,主要是gvalid这个,年久失修,维护困难,性能落后

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

github.com/gogf/gf/v2/util/gvalid: valid binary field,a large amount of memory is consumed
3 participants