转到函数映射

新手上路,请多包涵

我有一个定义了函数的 Go 程序。我还有一张地图,每个功能都应该有一个键。我怎样才能做到这一点?

我试过这个,但这不起作用。

func a(参数字符串){

}

m := 地图[字符串] func {
    'a_func':一个,
}

对于键,值 := 范围 m {
   如果键 == 'a_func' {
    价值(参数)
   }
}

原文由 Conceited Code 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 631
2 个回答

你想做这样的事情吗?我修改了示例以使用不同类型和数量的函数参数。

 package main

import "fmt"

func f(p string) {
    fmt.Println("function f parameter:", p)
}

func g(p string, q int) {
    fmt.Println("function g parameters:", p, q)
}

func main() {
    m := map[string]interface{}{
        "f": f,
        "g": g,
    }
    for k, v := range m {
        switch k {
        case "f":
            v.(func(string))("astring")
        case "g":
            v.(func(string, int))("astring", 42)
        }
    }
}

原文由 peterSO 发布,翻译遵循 CC BY-SA 3.0 许可协议

m := map[string]func(string, string)

如果你知道签名(并且所有函数都具有相同的签名),我认为这比使用 interface{} 更干净/更安全

原文由 Seth Hoenig 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题