如何解决为什么未编组的 YAML 数据为空?
我在解组一个简单的 YAML 数据片段时遇到问题:
package main
import (
"fmt"
"gopkg.in/yaml.v2"
)
type myDataStruct struct {
HTTP []struct {
Name string
Target string
}
}
func main() {
yamlData := `
HTTP:
- name: one
target: http://wazaa
- name: two
target: http://wazii
`
var myData myDataStruct
err := yaml.Unmarshal([]byte(yamlData),&myData)
if err != nil {
fmt.Printf("error: %v",err)
return
}
fmt.Print(myData)
}
游乐场:treeToValue
结果是 {[]}
而我对 Go 的有限知识无助于理解为什么?
解决方法
如果你没有指定 YAML 源和 Go 结构体字段中使用的标签之间的映射,默认情况下它们只会在只将首字母更改为较低匹配时匹配。
例如结构字段 Name
将匹配 name
,但不匹配 NAME
。
为 HTTP
字段指定映射:
type myDataStruct struct {
HTTP []struct {
Name string
Target string
} `yaml:"HTTP"`
}
通过此更改,它可以工作并输出(在 Go Playground 上尝试):
{[{one http://wazaa} {two http://wazii}]}
为所有字段提供映射是一种很好的做法,因此如果您重命名字段,它会继续工作:
type myDataStruct struct {
HTTP []struct {
Name string `yaml:"name"`
Target string `yaml:"target"`
} `yaml:"HTTP"`
}
尽管在您的情况下,默认匹配适用于 Name
和 Target
字段,但不提供映射。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。