我试图注册一个结构的自定义验证使用围棋-游乐场验证程序包。
我遇到的问题是,我注册的自定义验证器函数没有为嵌入式结构调用。
下面是一个完整的工作示例:https://play.golang.org/p/r7oaSo890q_L
那么,如何在嵌入式结构上运行结构级验证呢?
编辑*
具体而言,我不想使用一般的结构验证,因为我希望对同一类型有多个标记。
我的意思是用:
validator.RegisterStructValidation(SomeFunc, decimal.Decimal)不会为我工作,因为我希望有相同类型的多个标签的灵活性。有时我希望十进制是pos,有时是neg等。
下面是链接中的代码:
package main
import (
"fmt"
"github.com/shopspring/decimal"
"gopkg.in/go-playground/validator.v9"
)
type decimalPosRequest struct {
MoneyAmount decimal.Decimal `validate:"decimalpos"` // trying to validate this
}
func main() {
val := validator.New()
val.RegisterValidation(`decimalpos`,ValidateDecimalPositive)
request := decimalPosRequest{MoneyAmount: decimal.NewFromFloat(-1.0)}
err := val.Struct(&request)
if err == nil {
fmt.Println("Error! Should have failed but didn't")
}
}
func ValidateDecimalPositive(fl validator.FieldLevel) bool { // this function is never called for some reason
// get decimal
value := fl.Field().Interface().(decimal.Decimal)
// check is positive
return value.IsPositive()
}发布于 2022-07-22 03:01:58
它看起来像是验证器跳过未注册的类型。在注册自定义验证函数之前,我们必须注册类型。
下面是您如何做到这一点:https://go.dev/play/p/o7HrSTGFDxt
https://stackoverflow.com/questions/67074736
复制相似问题