gpt4 book ai didi

去YAML解析: mandatory fields

转载 作者:数据小太阳 更新时间:2023-10-29 03:19:17 24 4
gpt4 key购买 nike

总结:我需要将 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)
}

最佳答案

您可以使用这个 libraryHasZero 方法检查结构中是否存在任何缺失值。这将返回 true 或 false,具体取决于结构是否已完全填充。请看 Playground example得到一个想法。

但如果您特别需要告知缺少哪个字段,则需要检查该值是否为 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
}

Playground example如果你需要专门返回一个错误

关于去YAML解析: mandatory fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56506045/

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