
php小编香蕉为您介绍Go语言中的YAML自定义标签。YAML是一种轻量级的数据序列化格式,而Go语言作为一种强大的编程语言,自然也提供了对YAML的支持。在Go中,我们可以通过自定义标签来定义YAML的数据结构,以便更好地解析和处理YAML数据。通过使用自定义标签,我们可以在Go中轻松地将YAML数据映射到结构体中,实现更灵活、便捷的数据处理。下面将详细介绍Go中的YAML自定义标签的使用方法和注意事项。
我在 go 中有这些嵌套结构,并为其属性添加了自定义标签,
type dummyparams struct {
param1 string `yaml:"param1"`
param2 string `yaml:"param2"`
}
type dummy struct {
name string `yaml:"name"`
type string `yaml:"type"`
params dummyparams `yaml:"params"`
}我创建了一些 dummy 实例并将它们添加到切片中,
dummies := make([]dummy, 0)
dummy1 := dummy {
name: "a"
type: "type a"
params: dummyparams {
param1: "foo"
param2: "bar"
}
}
dummies = append(dummies, dummy1)
dummy2 := dummy {
name: "b"
type: "type b"
params: dummyparams {
param1: "foo"
param2: "bar"
}
}
dummies = append(dummies, dummy2)
最后我整理数据并将其写入文件
yamlData, err := yaml.Marshal(&dummies)
// handle error ...
writeErr := os.WriteFile("foo.yaml", yamlData, 0644)
// handle write error ...
但是我得到的 yaml 没有小写标记名称,而是有大写结构名称。 有人知道为什么会发生这种情况以及如何解决它吗?
归咎于您正在使用的 yaml 实现。例如,如果您使用 gopkg.in/yaml.v3 ,它就可以工作。在 go playground 上尝试一下。因此,一种解决方案是使用另一种 yaml 实现,例如 gopkg.in/yaml.v3。
您在评论中提到您正在使用 https:// /pkg.go.dev/sigs.k8s.io/[电子邮件受保护]。它的包文档说:
一个经过完善设计有着及其强大的会员互动和独特创新的内容管理系统。主要功能模块包括:文章频道、图片频道、下载频道、动漫频道、音乐频道、影视频道、商城频道、供求频道、采集管理 、专题频道等等。系统通用模块:用户管理、博客日志管理、相册管理、音乐盒管理、朋友圈管理、广告管理、公告管理、模板管理、网站信息配置、高级自定义SQL扩展标签,RSS在线订阅功能、网站统计、邮件列表、邮件群发、数据库管理、站内短消
0
简而言之,该库首先使用 go-yaml 将 yaml 转换为 json,然后使用 gopkg.in/yaml.v3 和 json.marshal 与结构进行转换。这意味着它有效地重用了 json 结构标签以及自定义 json 方法 json.unmarshal 和 marshaljson ,这与 go-yaml 不同。
所以 unmarshaljson 第一个编组到 json。如果您想要小写的字段名称,请使用 sigs.k8s.io/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c554d41406c5a1d021f021c">[email protected]</a> 标签而不是 json 标签:
import "sigs.k8s.io/yaml"
type dummyparams struct {
param1 string `json:"param1"`
param2 string `json:"param2"`
}
type dummy struct {
name string `json:"name"`
type string `json:"type"`
params dummyparams `json:"params"`
}通过此更改,输出包含小写名称(在 go playground 上尝试):
- name: a
params:
param1: foo
param2: bar
type: type a
- name: b
params:
param1: foo
param2: bar
type: type b请注意,必须使用 yaml 标签而不是 json 才能使其工作只是 yaml 包。如果您想让它与这个包和其他yaml实现一起使用,您可以提供两者 sigs.k8s.io/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" 的一个怪癖data-cfemail="047d6569684472352a372a34">[电子邮件受保护]</a> 和 json 标签:
type DummyParams struct {
Param1 string `json:"param1" yaml:"param1"`
Param2 string `json:"param2" yaml:"param2"`
}
type Dummy struct {
Name string `json:"name" yaml:"name"`
Type string `json:"type" yaml:"type"`
Params DummyParams `json:"params" yaml:"params"`
}以上就是Go 中的 YAML 自定义标签的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号