解析动态Yaml文件

popopanda:

我有一个yaml文件,当前写为:

    keys:
        - key: secret/dog
          values:
            - username: shiba
            - password: inu
        - key: secret/cat
          values:
            - dbhost: localhost
            - words: meow

但是,此yaml文件经常更改,因此每次可以使用不同的值添加新条目:

    keys:
        - key: secret/dog
          values:
            - username: shiba
            - password: inu
        - key: secret/cat
          values:
            - dbhost: localhost
            - words: meow
        - key: secret/mouse
          values:
            - color: white
        - key: secret/clouds
          values:
            - type: fluffy

我从使用gopkg.in/yaml.v2包开始就知道,如果所有值都相同,我可以解析yaml文件,例如:

            type Secrets struct {
                Keys []struct {
                    Key    string `json:"key"`
                    Values []struct {
                        Username string `json:"username"`
                        Password string `json:"password"`
                    } `json:"values"`
                } `json:"keys"`
            }

            func main() {

                var secret Secrets
                reader, err := os.Open("demo.yml")
                if err != nil {
                    log.Fatal(err)
                }
                buf, _ := ioutil.ReadAll(reader)
                yaml.Unmarshal(buf, &secret)

                fmt.Printf("%+v\n", secret.Keys[1].Key)

            }

在上面的示例中,它仅适用于密钥/狗,而不适用于其他密钥。

当新值经常添加到yaml文件中时,如何在Go中执行此操作?

谢谢

ttomalak:

如果您现在不精确的结构,则应该使结构看起来像这样

type Secrets struct {
    Keys []struct {
        Key    string `json:"key"`
        Values []map[string]string `json:"values"`
    } `json:"keys"`
}

它将解析整个yaml并获取所有值,但是它将是一个数组,因此您将失去对对象的类型提示。另一种方法是提前终止https://blog.gopheracademy.com/advent-2016/advanced-encoding-decoding/,但是每次出现新的键/值对时,您都需要添加新对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章