Dictionary 构造深层结构不工作
我有一个负责解析yaml文件中数据的struct 当这个结构在工作时,有时我会得到一些需要解析的新字段 这起作用了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
- 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
…谢谢,但这是一个深层结构…有点不同,有点复杂。这一点也不不同。在每个嵌套级别执行与文档中完全相同的类型断言。