为了账号安全,请及时绑定邮箱和手机立即绑定

带有数据列表的 yaml 文件

带有数据列表的 yaml 文件

Go
大话西游666 2022-06-27 15:12:00
全部,我确信这很容易,但有点挣扎——尝试使用 gopkg.in/yaml.v3 编写一个将在 Go 程序中使用的 yaml 文件。我需要定义服务器列表及其相关元数据。在 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:我确信我错过了一些相当明显的东西 - 有什么智慧的话可以帮助我前进吗?
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

这是一个很好的在线资源,可以帮助您了解 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"`

}

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


查看完整回答
反对 回复 2022-06-27
?
翻阅古今

TA贡献1780条经验 获得超5个赞

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


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"`

}


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信