首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有数据列表的yaml文件

带有数据列表的yaml文件
EN

Stack Overflow用户
提问于 2020-08-28 18:34:46
回答 2查看 188关注 0票数 0

全,

我肯定这很容易,但我正在努力编写一个yaml文件,该文件将在使用gopkg.in/yaml.v3的Go程序中使用。我需要定义服务器及其相关元数据的列表。在JSON中,这是一个相当简单的过程,在yaml文件中是如何处理的。

Go代码结构如下所示。

代码语言:javascript
运行
复制
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文件如下所示

代码语言:javascript
运行
复制
Servers:
  server:
    serverType: production
    serverPort: 80
    auth:
      auth: no
      tls:
  server:
    serverType: test
    serverPort: 8080
    auth:
      auth: no
      tls:

我肯定我错过了一些相当明显的东西--有什么智慧的话可以帮助我走下去吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-28 18:49:16

这是一个很好的在线资源,您可以了解YAML配置以及如何生成兼容的Go结构:https://yaml.to-go.online/

如果您想要一个服务器列表(切片)--并且不需要一个映射来通过键名查找--那么从这个YAML开始:

代码语言:javascript
运行
复制
Servers:
  - serverType: production
    serverPort: 80
    auth:
      auth: no
      tls:
  - serverType: test
    serverPort: 8080
    auth:
      auth: no
      tls:

并使用上述在线资源,生成以下结构:

代码语言:javascript
运行
复制
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模式可能:

代码语言:javascript
运行
复制
Servers:
  production:
    serverPort: 80
    auth:
      auth: no
      tls:
  test:
    serverPort: 8080
    auth:
      auth: no
      tls:

这个手工结构:

代码语言:javascript
运行
复制
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"`
}

https://play.golang.org/p/Cmvo0jxfZkd

票数 1
EN

Stack Overflow用户

发布于 2020-08-28 18:46:54

看起来你想要一组服务器。不能在一个对象下重复相同的键:

代码语言:javascript
运行
复制
Servers:
   - serverType: production
     ...
   - serverType: test

然后更改结构以匹配以下内容:

代码语言:javascript
运行
复制
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"`
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63639232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档