首頁 >後端開發 >Golang >Go中如何使用Map動態儲存和呼叫函數?

Go中如何使用Map動態儲存和呼叫函數?

Patricia Arquette
Patricia Arquette原創
2024-12-12 21:43:09287瀏覽

How Can I Store and Invoke Functions Dynamically Using Maps in Go?

在 Go 中的 Map 中儲存函數

在 Go 中,map 是可以儲存鍵值對的通用資料結構。有時,將函數儲存在映射中很有用,允許基於鍵進行動態呼叫。

問題:

假設您有多個函數並想要建立一個映射,其中鍵是函數名稱,值是函數本身。但是,當嘗試執行此操作時,如下所示,您會遇到錯誤:

func a(param string) {}

m := map[string]func{} 
'a_func': a,
}

for key, value := range m {
    if key == 'a_func' {
        value(param) 
    }
}

解決方案:

出現此問題的原因是定義特定於類型的映射的語法是不正確的。要解決此問題,您可以使用語法 map[string]interface{} 代替,因為值不強制類型安全。下面的修改範例說明如何儲存和呼叫映射中的函數:

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

在此範例中,映射 m 將兩個函數值儲存為 interface{}。當根據 key 呼叫函數時,會執行類型斷言,將介面值轉換為正確的函數類型。

以上是Go中如何使用Map動態儲存和呼叫函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn