Dictionary 构造深层结构不工作

Dictionary 构造深层结构不工作,dictionary,go,struct,hashmap,yaml,Dictionary,Go,Struct,Hashmap,Yaml,我有一个负责解析yaml文件中数据的struct 当这个结构在工作时,有时我会得到一些需要解析的新字段 这起作用了 - name: test1 type: type path: path 这不是 - name: test1 type: type path: path build-parameters: maven-opts: defines: skipTests: true type

我有一个负责解析yaml文件中数据的struct 当这个结构在工作时,有时我会得到一些需要解析的新字段

这起作用了

  - name: test1
    type: type
    path: path
这不是

 - 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"`
}
这是结构

 - 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
我应该如何构造我的结构来接受这个构建参数条目呢

这是我使用的图书馆


您的结构与数据结构不匹配。如果
参数
映射[字符串]字符串
,则它接受键和值都是
字符串
的键值对。在数据中,
生成参数
包含一个对象,该对象包含一个对象,该对象包含一个键值对

您可以将
参数
重新定义为
映射[string]接口{}
并使用类型断言,也可以定义整个结构,例如:

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
        }
    }
}

非常感谢你,1+你能不能也提供接口(
map[string]interface{}
)以及我应该如何从中获取数据作为答案,现在,它的maven选择和构建参数,但它可以是具有此结构的任何值…
MavenOpts
在您的示例中是硬代码,它可以是任何值…类型断言都有很好的文档记录,而且我最缺乏的知识是,如果我使用
map[string]接口{}
,我应该如何访问才能找到值,例如,对于
skipTests
…谢谢,但这是一个深层结构…有点不同,有点复杂。这一点也不不同。在每个嵌套级别执行与文档中完全相同的类型断言。