1 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
我試過的是這個(gè)有效但如果運(yùn)行值為空或根本沒有條目會(huì)發(fā)生什么,這將導(dǎo)致轉(zhuǎn)儲(chǔ)我該如何克服這個(gè)問題?
你可以做
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)
這非常冗長(zhǎng),因此您可以使用類似https://github.com/jmoiron/jsonq 的內(nèi)容,您可以在其中指定嵌套在多個(gè)地圖級(jí)別內(nèi)的所需值的“路徑”。盡管名稱中有“json”,但這個(gè)庫(kù)使用 map[string]interface{} 而不是 json 文件。但請(qǐng)注意,您用于 yaml 解組的庫(kù)結(jié)果不是map[interface{}]interface{},map[string]interface{}您必須使用不同的庫(kù)才能使其與 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 關(guān)注
- 163 瀏覽
添加回答
舉報(bào)