2 回答

TA貢獻1811條經驗 獲得超4個贊
在更正您的代碼以便它甚至可以編譯之后(即替換interface[]為interface{},并刪除一些未定義的變量等),實際錯誤與初始化循環無關。確切的錯誤實際上是(參見操場示例):
./prog.go:10:25:未定義:調用
(如果您實際上收到有關初始化循環的錯誤而不是此錯誤,則可能意味著您粘貼的代碼實際上與您的實際代碼不夠接近,因此請使用最小的、可重現的示例更新問題。)
對此的解決方案是calls在定義引用它的函數之前進行定義。這很容易通過預定義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貢獻1804條經驗 獲得超3個贊
發生這種情況是因為在地圖的初始化范圍內,尚未分配“調用”地圖。你可以有它如下:
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
},
}
這樣你就不需要在你的范圍內有'calls'映射來獲得'f1'值
- 2 回答
- 0 關注
- 117 瀏覽
添加回答
舉報