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

标签 go

我有一个结构(带有 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/

    相关文章:

    go - runtime.SetFinalizer:无法确定C.Char的名称种类

    go - 将表单值附加到 Go 中的 GET/POST 请求

    go - 沙发底座中的 “where not equal to”

    go - 在 GO 语言中将方法从一个文件引用到另一个文件

    xml - 在 Go 中编码元素中的任意 XML 属性?

    performance - Go 语言指针性能

    使用chardata在golang中解析xml

    xml - Go XML chardata 打印空行

    go - 在接收UDP时获取本地IP地址

    go - 将函数作为参数传递 : Incompatible types in Golang