首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从同一映射中的另一个函数调用存储在映射中的函数

如何从同一映射中的另一个函数调用存储在映射中的函数
EN

Stack Overflow用户
提问于 2020-06-28 01:43:57
回答 2查看 228关注 0票数 1

我试图从同一映射中定义的另一个函数调用在映射中定义的函数。但是Go编译器说:“初始化循环”。这是代码:

代码语言:javascript
复制
package main

import ...

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调用,不在函数中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-28 11:05:46

在修改代码以便它甚至可以编译(即用interface[]替换interface{},并删除一些未定义的变量等)之后,实际的错误与初始化循环无关。确切的错误实际上是(参见操场实例):

./10.10:10:25:未定义:呼叫

(如果您实际上收到了一个有关初始化循环的错误,而不是这个,这可能意味着您粘贴的代码实际上与实际代码不够接近,所以请用最小的,可复制的例子更新这个问题。)

解决这一问题的方法是在定义引用它的函数之前定义calls。通过将calls预定义为空映射(操场链接)很容易做到这一点:

代码语言:javascript
复制
    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
        },
    }
票数 0
EN

Stack Overflow用户

发布于 2020-06-28 07:50:48

这是因为在映射初始化的范围内,还没有分配“调用”映射。您可以按以下方式获得它:

代码语言:javascript
复制
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’值。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62617335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档