首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用go-游乐场验证器在嵌入式结构上运行自定义验证函数

如何使用go-游乐场验证器在嵌入式结构上运行自定义验证函数
EN

Stack Overflow用户
提问于 2021-04-13 12:19:26
回答 1查看 1K关注 0票数 2

我试图注册一个结构的自定义验证使用围棋-游乐场验证程序包。

我遇到的问题是,我注册的自定义验证器函数没有为嵌入式结构调用。

下面是一个完整的工作示例:https://play.golang.org/p/r7oaSo890q_L

那么,如何在嵌入式结构上运行结构级验证呢?

编辑*

具体而言,我不想使用一般的结构验证,因为我希望对同一类型有多个标记。

我的意思是用:

代码语言:javascript
复制
validator.RegisterStructValidation(SomeFunc, decimal.Decimal)

不会为我工作,因为我希望有相同类型的多个标签的灵活性。有时我希望十进制是pos,有时是neg等。

下面是链接中的代码:

代码语言:javascript
复制
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()
}
EN

回答 1

Stack Overflow用户

发布于 2022-07-22 03:01:58

它看起来像是验证器跳过未注册的类型。在注册自定义验证函数之前,我们必须注册类型。

下面是您如何做到这一点:https://go.dev/play/p/o7HrSTGFDxt

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67074736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档