golang gookit验证器无法与全局自定义验证器一起使用。

huangapple go评论101阅读模式
英文:

golang gookit validate does not work with global custom validator

问题

我正在尝试使用Go语言的go-kit验证器并添加自定义验证器,但是该函数从未被调用。

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gookit/validate"
  5. )
  6. type Sample struct {
  7. Name string `json:"name" validate:"required"`
  8. Address string `json:"address" validate:"required"`
  9. Payment string `json:"payment" validate:"payment_method"`
  10. }
  11. func main() {
  12. validate.AddValidator("payment_method", func(val interface{}) bool {
  13. value, ok := val.(string)
  14. fmt.Println(value)
  15. if !ok {
  16. return false
  17. }
  18. if value != "hello" {
  19. return false
  20. }
  21. return true
  22. })
  23. s := Sample{Name: "name", Address: "address", Payment: ""}
  24. v := validate.Struct(&s)
  25. res := v.Validate()
  26. if !res {
  27. fmt.Println(v.Errors.OneError())
  28. } else {
  29. fmt.Println("SUCCESS")
  30. }
  31. }

结果始终为成功,并且自定义验证器从未被调用。可以直接在Go Playground上运行代码。

英文:

I am trying to use golang gookit validator and adding custom validator, but the function never got fired.

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gookit/validate"
  5. )
  6. type Sample struct {
  7. Name string `json:"name" validate:"required"`
  8. Addres string `json:"address" validate:"required"`
  9. Payment string `json:"payment" validate:"payment_method"`
  10. }
  11. func main() {
  12. validate.AddValidator("payment_method", func(val interface{}) bool {
  13. value, ok := val.(string)
  14. fmt.Println(value)
  15. if !ok {
  16. return false
  17. }
  18. if value != "hello" {
  19. return false
  20. }
  21. return true
  22. })
  23. s := Sample{Name: "name", Addres: "address", Payment: ""}
  24. v := validate.Struct(&s)
  25. res := v.Validate()
  26. if !res {
  27. fmt.Println(v.Errors.OneError())
  28. } else {
  29. fmt.Println("SUCCESS")
  30. }
  31. }

The result will be always success and the custom validator never get called. Directly on go playground

答案1

得分: 0

你需要在config中明确指出,不要跳过空值,像下面这样:

  1. validate.Config(func(opt *validate.GlobalOption) {
  2. opt.SkipOnEmpty = false
  3. })

然后运行代码,它就会起作用。

英文:

You need to explicitly mention in the config,

> not to skip empty values

like below:

  1. validate.Config(func(opt *validate.GlobalOption) {
  2. opt.SkipOnEmpty = false
  3. })

Then, run the code, it will work

huangapple
  • 本文由 发表于 2023年7月16日 21:22:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/76698490.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定