gpt4 book ai didi

go - 在golang中一起验证struct的两个字段

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:01 26 4
gpt4 key购买 nike

我正在查看 golang 验证器,想知道如何同时验证两个字段?

我正在通过请求发送一个 json 正文并将正文解码到这个结构中。在正文中的两个参数(ID1 和 ID2)中,必须存在其中一个。所以,我想验证两者都不存在的情况。

type IDs struct {
ID1 int64 `json:"id_one"`
ID2 int64 `json:"id_two"`
}

我如何使用这个包来验证它? https://godoc.org/gopkg.in/validator.v2

我浏览了文档,但找不到实现它的方法。

我可以

type IDs struct {
ID1 int64 `json:"id_one" validate:"min=0"`
ID2 int64 `json:"id_two" validate:"min=0"`
}

但这仍然让两者都不存在,而是应该存在其中一个。

如果不能用这个包来做,还有什么其他方法可以做到这一点?

最佳答案

您可以使用自定义验证函数。

Playground - https://play.golang.org/p/vYtp5xKakJ

package main

import (
"errors"
"fmt"

validator "gopkg.in/validator.v2"
)

var atLeastOneIntValues []interface{}

func atLeastOneInt(v interface{}, param string) error {
atLeastOneIntValues = append(atLeastOneIntValues, v)
if len(atLeastOneIntValues) == 2 {
for _, value := range atLeastOneIntValues {
if value.(int64) != 0 {
return nil
}
}

return errors.New("At least one non-empty value should be presented")
}

return nil
}

type IDs struct {
ID1 int64 `json:"id_one" validate:"atleastoneint"`
ID2 int64 `json:"id_two" validate:"atleastoneint"`
}

func main() {
validator.SetValidationFunc("atleastoneint", atLeastOneInt)
fmt.Printf("%v", validator.Validate(IDs{}))
}

关于go - 在golang中一起验证struct的两个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46576183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com