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

如何拥有函数指针的映射?

如何拥有函数指针的映射?

Go
智慧大石 2022-05-10 13:34:45
我需要编写一个解析器,并且每种情况都有不同的功能。我想为每个键分配一个功能。像那样:var myMap = map[string]funcPtr {    "1C": func1C,    "1D": func1D,}我想这样使用:func func1C(){  fmt.Print...}func func1D(){  fmt.Print...}test := "1D"f, err := myMap[test]f()  // or myMap[test]()   that'll call func1D() 基本上,每个键都有不同的功能。什么是最好的解决方案?
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

您将其作为(在最基本的情况下)作为map[keyType]func(这是从keyType您碰巧拥有的任何哈希值到不带参数且没有返回值的函数的映射)。


如果您有更多涉及的函数签名,您可以为其声明一个类型,然后使用该类型来定义您的地图:


type myFunc func(int, int) int

var dispatch[string]myFunc


func init() {

        dispatch["add"] = func(a, b int) int { return a + b }

}

另一个可能具有说明性的示例如下(操场链接):


type printFunc func(string)


func sayHello(name string) {

    fmt.Println("Hello", name)

}


func sayGoodbye(name string) {

    fmt.Println("Goodbye", name)

}


func main() {

    dispatch := map[string]printFunc{

        "Alice": sayHello,

        "Bob":   sayGoodbye,

    }


    for _, name := range []string{"Alice", "Bob"} {

        if f, ok := dispatch[name]; ok {

            f(name)

        } else {

            fmt.Println("No entry for", name)

        }

    }

}


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信