gpt4 book ai didi

go - 在 Golang 结构中正确使用绑定(bind) :"required"的输入

转载 作者:行者123 更新时间:2023-12-01 22:36:35 25 4
gpt4 key购买 nike

我有一个结构(带有 1 个字段,这里为了简化目的),其数据来自另一个函数。

此外,对于结构字段,我放了 绑定(bind):“必需” ,因为我需要它不为空/存在。

代码:

package main

import (
"fmt"
"encoding/json"
)

type Config struct {
Name string `yaml:"name" json:"name" binding:"required"`
}

func main() {
var myConfig Config

var rawConfig = []byte(`{}`) // Empty, Nothing getting passed.

err := json.Unmarshal(rawConfig, &myConfig)
if err != nil {
panic(err)
}
fmt.Printf("Name = %s\n", myConfig.Name)
}

当我运行这个时,即使 Name 值没有传入,它也会通过。

输出:
Name = 

去游乐场代码链接: https://play.golang.org/p/zA6nij9vTvY

我想实现以下目标:
  • 正如我期望“名称”字段存在一样,如果不存在,我该怎么做才能使其失败。解码不会使用 binding=required 标记并失败吗?
  • 否则,找出必填字段是否不存在以致我们失败的最佳方法是什么?
  • 或者是在字段上迭代并找出是否为空的粗略方法,这是唯一的方法吗?
  • 最佳答案

    您可以通过使用反射遍历结构字段来以艰难的方式做到这一点,获取标签并解析它们,除非您需要一些自定义,否则不建议这样做。

    或者您可能喜欢使用可用的验证器包:
    https://github.com/dealancer/validate


    package main

    import (
    "encoding/json"
    "fmt"
    "gopkg.in/dealancer/validate.v2"
    )

    type Config struct {
    Name string `yaml:"name" json:"name" validate:"empty=false"`
    }

    func main() {
    var myConfig Config

    var rawConfig = []byte(`{}`) // Empty, Nothing getting passed.

    err := json.Unmarshal(rawConfig, &myConfig)
    if err != nil {
    panic(err)
    }
    err = validate.Validate(myConfig)
    if err != nil {
    panic(err)
    }
    fmt.Printf("Name = %s\n", myConfig.Name)
    }

    关于go - 在 Golang 结构中正确使用绑定(bind) :"required"的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61419016/

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