我正在尝试解组 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
显然,该 条目现在会导致错误。我怎样才能让它同时识别列表和单个字符串条目?
谢谢
以前已经以各种方式回答过这个问题,但长话短说,很容易将其解组到接口中,然后处理这两种情况
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)