如何在 Golang 中使用动态键解析 YAML

我正在尝试使用 Go 解析 YAML 文件。问题是 YAML 文件中的键可能并不总是相同的。这是为了进行 API 版本控制,以便用户可以定义他们支持的版本。例如 V1、V2、V3 等。它们不需要按顺序排列并且可以省略它们不支持的版本,即 V0、V2、V5 等。


package main


import (

  "fmt"

  "gopkg.in/yaml.v2"

)


var data = `

---

development:

  skip-header-validation: true

  V1:

    current: "1.0.0"

    mime_types:

      - application/vnd.company.jk.identity+json;

      - application/vnd.company.jk.user+json;

      - application/vnd.company.jk.role+json;

      - application/vnd.company.jk.scope+json;

      - application/vnd.company.jk.test+json;

    skip-mime-type-validation: true

    skip-version-validation: true

  V2:

    current: "2.0.0"

    mime_types:

      - application/vnd.company.jk.identity+json;

      - application/vnd.company.jk.user+json;

      - application/vnd.company.jk.role+json;

      - application/vnd.company.jk.scope+json;

      - application/vnd.company.jk.test+json;


`


type MajorVersion struct {

  Current                 string    `yaml:"current"`

  MimeTypes               []string  `yaml:"mime_types"`

  SkipVersionValidation   bool      `yaml:"skip-version-validation"`

  SkipMimeTypeValidation  bool      `yaml:"skip-mime-type-validation"`

}


type Environment struct {

  SkipHeaderValidation  bool        `yaml:"skip-header-validation"`

  Version               map[string]MajorVersion

}


func main() {

  e := Environment{}


  yaml.Unmarshal([]byte(data), &e)

  fmt.Println(e)

}

我看到这里问了一个类似的问题


这是在顶层,我还没有完全弄清楚如何从结构内部做到这一点。


潇湘沐
浏览 282回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go