Go YAML 解析:必填字段

摘要:我需要将 YAML 格式的数据解析为 golang 结构体。是否有一种方法(库、属性)使某些字段成为必需字段,即如果某些字段不存在,则使 Unmarshal 函数返回错误?


所需示例:此代码中的 Unmarshal 函数应该引发错误,因为输入数据不包含“b”字段。


package main


import (

    "fmt"

    "gopkg.in/yaml.v2"

)


type TestStruct struct {

    FieldA string `yaml:"a"`

    FieldB string `yaml:"b"`

}


func main() {

    input := []byte(`{a: 1}`)

    var output TestStruct


    _ = yaml.Unmarshal(input, &output)

}


慕容森
浏览 170回答 1
1回答

繁星淼淼

您可以使用该库的HasZero方法来检查结构中是否存在缺失值。这将返回 true 或 false,具体取决于结构是否完全填充。但如果您特别需要知道缺少哪个字段,则需要检查该值是否为 nil,如下例所示。package mainimport (   "fmt"   "errors"  "gopkg.in/yaml.v2")type TestStruct struct {  FieldA  string `yaml:"a"`  FieldB  string `yaml:"b"`}func main() {  input := []byte(`{a: 1}`)  var output TestStruct   if err := output.ParseFromFile(input); err != nil {     fmt.Println(err)  }  fmt.Println(output)     }func (output *TestStruct) ParseFromFile(data []byte) error {  if err := yaml.Unmarshal(data, output); err != nil {    return err  }  if output.FieldA == "" {    return errors.New("Blank Field A")  }  if output.FieldB == "" {    return errors.New("Blank Field B")  }  return nil}如果您需要专门返回错误,则操场示例
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go