我有一个结构(带有 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
我想实现以下目标:
最佳答案
您可以通过使用反射遍历结构字段来以艰难的方式做到这一点,获取标签并解析它们,除非您需要一些自定义,否则不建议这样做。
或者您可能喜欢使用可用的验证器包:
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/