将 GO YAML 解组为 Map 或 String

Naa*_*tan 6 yaml go

我正在尝试解组 YAML 条目,这些条目可以是字符串或键列表:值字符串(按照 Go 的映射)。可悲的是,我无法弄清楚如何完成这项工作。我知道我可以编写自己的解组器,但这似乎只适用于结构。

我有第一部分工作:

package main

import (
    "log"

    "gopkg.in/yaml.v2"
)

type Data struct {
    Entry []Entry `yaml:"entries"`
}

type Entry map[string]string

var dat string = `
entries: 
  - keya1: val1
    keya2: val2
  - keyb1: val1
    keyb2: val2
  - val3`

func main() {
    out := Data{}
    if err := yaml.Unmarshal([]byte(dat), &out); err != nil {
        log.Fatal(err)
    }

    log.Printf("%+v", out)
}
Run Code Online (Sandbox Code Playgroud)

- val3显然,该 条目现在会导致错误。我怎样才能让它同时识别列表和单个字符串条目?

谢谢

Ben*_*ish 2

以前已经以各种方式回答过这个问题,但长话短说,很容易将其解组到接口中,然后处理这两种情况

type Entry interface{}

for _, entry := range out.Entry {
        switch i := entry.(type) {
        case string:
            log.Printf("i is a string %+v\n", i)
        case map[interface{}]interface{}:
            log.Printf("i is a map %+v\n", i)
        }

}
Run Code Online (Sandbox Code Playgroud)