全,
我肯定这很容易,但我正在努力编写一个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:我肯定我错过了一些相当明显的东西--有什么智慧的话可以帮助我走下去吗?
谢谢
发布于 2020-08-28 18:49:16
这是一个很好的在线资源,您可以了解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"`
}发布于 2020-08-28 18:46:54
看起来你想要一组服务器。不能在一个对象下重复相同的键:
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"`
}https://stackoverflow.com/questions/63639232
复制相似问题