【发布时间】:2021-07-20 06:09:29
【问题描述】:
我正在使用go-playground/validator/v10 来验证一些输入,并且在使用自定义验证标签和函数时遇到了一些问题。问题是当结构字段之一是不同的结构时,不会调用该函数。这是一个例子:
type ChildStruct struct {
Value int
}
type ParentStruct struct {
Child ChildStruct `validate:"myValidate"`
}
func myValidate(fl validator.FieldLevel) bool {
fmt.Println("INSIDE MY VALIDATOR") // <- This is never printed
return false
}
func main() {
validator := validator.New()
validator.RegisterValidation("myValidate", myValidate)
data := &ParentStruct{
Child: ChildStruct{
Value: 10,
},
}
validateErr := validator.Struct(data)
if validateErr != nil { // <- This is always nil since MyValidate is never called
fmt.Println("GOT ERROR")
fmt.Println(validateErr)
}
fmt.Println("DONE")
}
如果我将 parentStruct 更改为:
type ParentStruct struct {
Child int `validate:"myValidate"`
}
一切正常。
如果我将validate:"myValidate" 部分添加到 ChildStruct 它也可以工作,但是,返回的错误是说 ChildStruct.Value 是错误的,而它应该说 ParentStruct.Child 是错误的。
有人知道我做错了什么吗?
【问题讨论】:
标签: go go-playground