2 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
在更正您的代碼以便它甚至可以編譯之后(即替換interface[]為interface{},并刪除一些未定義的變量等),實(shí)際錯(cuò)誤與初始化循環(huán)無關(guān)。確切的錯(cuò)誤實(shí)際上是(參見操場示例):
./prog.go:10:25:未定義:調(diào)用
(如果您實(shí)際上收到有關(guān)初始化循環(huán)的錯(cuò)誤而不是此錯(cuò)誤,則可能意味著您粘貼的代碼實(shí)際上與您的實(shí)際代碼不夠接近,因此請使用最小的、可重現(xiàn)的示例更新問題。)
對此的解決方案是calls在定義引用它的函數(shù)之前進(jìn)行定義。這很容易通過預(yù)定義calls為空地圖(游樂場鏈接)來完成:
calls := make(map[string]func(string) (interface{}, error), 0 )
calls = map[string]func(arg string) (interface{}, error) {
"function1": func(arg string) (interface{}, error) {
// do stuff
return nil, nil
},
"function2": func(arg string) (interface{}, error) {
res, err := calls["function1"](arg) // HERE IS THE ERROR
return res, err
},
}

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
發(fā)生這種情況是因?yàn)樵诘貓D的初始化范圍內(nèi),尚未分配“調(diào)用”地圖。你可以有它如下:
f1 := func(arg string) (interface{}, error) {
// do stuff
return nil, nil
}
var calls = map[string]func(arg string) (interface{}, error) {
"function1": f1,
"function2": func(arg string) (interface{}, error) {
res, error := f1(arg)
return res, nil
},
}
這樣你就不需要在你的范圍內(nèi)有'calls'映射來獲得'f1'值
- 2 回答
- 0 關(guān)注
- 114 瀏覽
添加回答
舉報(bào)