1 回答
TA贡献1893条经验 获得超10个赞
我试过的是这个有效但如果运行值为空或根本没有条目会发生什么,这将导致转储我该如何克服这个问题?
你可以做
runParams, ok := runners.BuildParams.BeforeExec["run-parameters"]
if !ok {
// handle lack of "run-parameters" in BeforeExec
}
runParamsMap, ok := runParams.(map[interface{}]interface{})
if !ok {
// handle "run-parameters" not being a map
}
run, ok := runParamsMap["run"]
if !ok {
// handle lack of "run" inside "run-parameters"
}
runStr, ok := run.(string)
if !ok {
// handle "run" not being a string
}
fmt.Println("run: ", runStr)
这非常冗长,因此您可以使用类似https://github.com/jmoiron/jsonq 的内容,您可以在其中指定嵌套在多个地图级别内的所需值的“路径”。尽管名称中有“json”,但这个库使用 map[string]interface{} 而不是 json 文件。但请注意,您用于 yaml 解组的库结果不是map[interface{}]interface{},map[string]interface{}您必须使用不同的库才能使其与 jsonq 一起使用。
run, err := jsonq.NewQuery(runners.BuildParams.BeforeExec).String("run-parameters", "run")
if err != nil {
// handle all possible errors in one place
}
fmt.Println("run: ", run)
- 1 回答
- 0 关注
- 120 浏览
添加回答
举报