猿问

带有数据列表的 yaml 文件

全部,


我确信这很容易,但有点挣扎——尝试使用 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:

我确信我错过了一些相当明显的东西 - 有什么智慧的话可以帮助我前进吗?


大话西游666
浏览 204回答 2
2回答

森栏

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

翻阅古今

看起来您想要一组服务器。您不能在一个对象下重复相同的键: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"`}
随时随地看视频慕课网APP

相关分类

Go
我要回答