亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號