为了账号安全,请及时绑定邮箱和手机立即绑定

Go YAML 解析:必填字段

Go YAML 解析:必填字段

Go
慕容森 2023-06-26 15:01:33
摘要:我需要将 YAML 格式的数据解析为 golang 结构体。是否有一种方法(库、属性)使某些字段成为必需字段,即如果某些字段不存在,则使 Unmarshal 函数返回错误?所需示例:此代码中的 Unmarshal 函数应该引发错误,因为输入数据不包含“b”字段。package mainimport (    "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)}
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您可以使用该库的HasZero方法来检查结构中是否存在缺失值。这将返回 true 或 false,具体取决于结构是否完全填充。

但如果您特别需要知道缺少哪个字段,则需要检查该值是否为 nil,如下例所示。

package main

import (

   "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

}

如果您需要专门返回错误,则操场示例


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信