我的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以接受这个构建参数条目呢?
这是我使用的库
答案 0 :(得分:0)
您的结构与数据结构不匹配。如果Parameters
是map[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
}
}
}