validation - 如何使用 go-playground 验证器在嵌入式结构上运行自定义验证函数
问题描述
我正在尝试使用 go-playgrounds 验证器包为结构注册自定义验证。
我遇到的问题是我注册的自定义验证器函数没有被嵌入式结构调用。
这是一个完整的工作示例: https: //play.golang.org/p/r7oaSo890q_L
那么,如何在嵌入式结构上运行结构级别验证?
编辑*
只是具体一点-我不想使用一般的结构验证,因为我希望有多个相同类型的标签。
我的意思是使用:
validator.RegisterStructValidation(SomeFunc, decimal.Decimal)
对我不起作用,因为我希望具有相同类型的多个标签的灵活性。有时我希望小数为 pos,有时为 neg 等
EDIT2* 这是链接中的代码:
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()
}
解决方案
推荐阅读
- python - 重新格式化 json 文件
- pandas - 如何使用 pandas 从 csv 为 value 和 autopct 生成饼图标签?
- cocoa - 将蒙版设置为 CALayer 剪辑子层
- linux - 无法检测到蓝牙设备 - qt.bluetooth.bluez 收到广告错误
- linux - bitbake 失败(“linux-libc-headers”)?
- sqlite - 数据库查询后 Flutter futurebuilder 快照为空,直到热重载
- typescript - 从只读元组类型中过滤掉值
- python - 为什么我使用 Tenserflow 和 Keras GPU 的模型出现 OOM 错误?
- javascript - 使用nodejs express mysql登录系统
- python - 分页在弹性搜索中如何工作?