亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何擁有函數指針的映射?

如何擁有函數指針的映射?

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 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號