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 关注
- 118 浏览
添加回答
举报