为了账号安全,请及时绑定邮箱和手机立即绑定

如何从同一地图内的另一个函数调用存储在地图中的函数

如何从同一地图内的另一个函数调用存储在地图中的函数

Go
慕田峪7331174 2022-06-13 15:49:18
我正在尝试从同一张地图中定义的另一个函数调用地图中定义的函数。但是 Go 编译器说:“初始化循环”。这是代码:package mainimport ...var calls = map[string]func(arg string) (interface[], error) {    "function1": func(arg string) (interface{}, error) {         // do stuff         return res, nil     },    "function2": func(arg string) (interface{}, error) {         res, error := calls["function1"](arg) // HERE IS THE ERROR         return res, nil     },}如何从地图内部调用其他函数?var 调用,不在函数内部
查看完整描述

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

        },

    }


查看完整回答
反对 回复 2022-06-13
?
狐的传说

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'值


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号