构造深层结构不起作用

时间:2017-12-21 14:07:43

标签: dictionary go struct hashmap yaml

我的struct负责解析yaml文件中的数据 虽然这个结构有时候工作,但我得到了一些我需要解析的新字段

这是有效的

 - name: test1
    type: type
    path: path
    build-parameters:
       maven-opts:
          defines:
              skipTests: true

这不是

type Modules struct {
    Name string
    Type string
    Path string
    Parameters Parameters `yaml:"build-parameters,omitempty"`
}

这是结构

type Parameters map[string]string

参数的类型为:

python -m webbrowser -t "http://www.python.org"

我应该如何构造我的struct以接受这个构建参数条目呢?

这是我使用的库

API

1 个答案:

答案 0 :(得分:0)

您的结构与数据结构不匹配。如果Parametersmap[string]string,则它接受键值对,其中键和值均为string。在您的数据中,build-parameters包含一个对象,该对象包含一个对象,该对象包含一个键值对。

您可以将Parameters重新定义为map[string]interface{}并使用类型断言,也可以定义整个结构,例如:

type Parameters struct {
    MavenOpts struct {
        Defines map[string]string
    } `yaml:"maven-opts"`
}

如果使用空接口,则必须使用类型断言,这会非常麻烦。例如:

if opts, ok := module.Parameters["maven-opts"].(map[string]interface{}); ok {
    if defines,ok := opts["defines"].(map[string]interface{}); ok {
        if skipTests,ok := defines["skipTests"].(bool); ok {
            // skipTests is the bool value from the yaml
        }
    }
}