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

我需要编写一个解析器,并且每种情况都有不同的功能。我想为每个键分配一个功能。像那样:


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() 

基本上,每个键都有不同的功能。


什么是最好的解决方案?


智慧大石
浏览 138回答 1
1回答

慕的地10843

您将其作为(在最基本的情况下)作为map[keyType]func(这是从keyType您碰巧拥有的任何哈希值到不带参数且没有返回值的函数的映射)。如果您有更多涉及的函数签名,您可以为其声明一个类型,然后使用该类型来定义您的地图:type myFunc func(int, int) intvar dispatch[string]myFuncfunc 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)        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go