如何解决带有数据列表的yaml文件
全部
我确信这很容易,但是有点挣扎-尝试编写一个Yaml文件,该文件将使用gopkg.in/yaml.v3在Go程序中使用。我需要定义服务器及其相关元数据的列表。在JSON中,这是一个非常简单的过程,如何在yaml文件中处理。
Go代码结构如下。
type Config struct {
Servers struct {
Servers struct {
ServerType string `yaml:"serverType"`
ServerPort int `yaml:"serverPort"`
Auth struct {
AuthType string `yaml:"auth"`
TLSKey string `yaml:"tls"`
} `yaml:"auth"`
}`yaml:"server"`
} `yaml:"Servers"`
}
yaml文件如下所示
Servers:
server:
serverType: production
serverPort: 80
auth:
auth: no
tls:
server:
serverType: test
serverPort: 8080
auth:
auth: no
tls:
我确定我缺少明显的东西-有智慧的言语可以帮助我前进吗?
谢谢
解决方法
您似乎需要一组服务器。您不能在一个对象下重复相同的键:
Servers:
- serverType: production
...
- serverType: test
然后更改结构以使其与此匹配:
type Config struct {
Servers []struct {
ServerType string `yaml:"serverType"`
ServerPort int `yaml:"serverPort"`
Auth struct {
AuthType string `yaml:"auth"`
TLSKey string `yaml:"tls"`
} `yaml:"auth"`
} `yaml:"Servers"`
}
,
这是一个很好的在线资源,可以帮助您了解YAML配置以及如何生成兼容的Go结构:https://yaml.to-go.online/
如果您想要服务器列表(切片)-不需要映射即可通过键名进行查找-则以以下YAML开头:
Servers:
- serverType: production
serverPort: 80
auth:
auth: no
tls:
- serverType: test
serverPort: 8080
auth:
auth: no
tls:
并使用上面的在线资源,产生此结构:
type AutoGenerated struct {
Servers []struct {
ServerType string `yaml:"serverType"`
ServerPort int `yaml:"serverPort"`
Auth struct {
Auth string `yaml:"auth"`
TLS interface{} `yaml:"tls"`
} `yaml:"auth"`
} `yaml:"Servers"`
}
https://play.golang.org/p/726afn_I826
如果您希望能够按名称(即地图)为服务器配置编制索引,则可能使用以下YAML模式:
Servers:
production:
serverPort: 80
auth:
auth: no
tls:
test:
serverPort: 8080
auth:
auth: no
tls:
和这个手工结构:
type Config struct {
Servers map[string]struct {
ServerPort int `yaml:"serverPort"`
Auth struct {
Auth string `yaml:"auth"`
TLS interface{} `yaml:"tls"`
} `yaml:"auth"`
} `yaml:"Servers"`
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。