Go では、関数マップを関数のパラメータとして渡すことができ、コードの再利用とカスタマイズ機能を提供します。関数マップを作成します。関数名をキーとして関数自体を使用して、map[string]interface{} タイプを使用します。値として。引数として渡す: 関数の引数リストで funcMap タイプを使用して、関数マップを受け入れます。関数の実行:reflect パッケージを介して関数マップから関数を取得し、可変引数を使用して呼び出します。実際のケース: 関数マッピングをテンプレート エンジンに渡して、実行時にテンプレート関数を動的に実行できます。
Go で引数として渡される関数マップ
関数マップは、関数を次のように使用できるようにする高レベルのデータ構造です。キーを使用して他の値を保存します。 Go では、関数マップを関数の引数として使用できるため、強力な再利用とコードのカスタマイズが可能になります。
関数マッピングの作成
関数マッピングは、map[string]interface{}
タイプを使用して作成されます。キーは関数名 ( string)、値は関数そのものです (interface{}
型では任意の型を格納できます)。例:
funcMap := map[string]interface{}{ "greet": func(name string) string { return fmt.Sprintf("Hello, %s!", name) }, "add": func(a, b int) int { return a + b }, }
関数マップをパラメータとして渡す
関数のパラメータ リストで funcMap
型を使用して受け入れることができます。パラメータとしての関数マップ。例:
func executeFunction(name string, args ...interface{}) (interface{}, error) { if fn, ok := funcMap[name]; ok { return fn.(func(...interface{}) interface{})(args...), nil } return nil, fmt.Errorf("function '%s' not found in function map", name) }
この関数では、指定された名前 (name
) に基づいて funcMap
から関数を取得し、reflect
を使用します。それを呼び出すためのパッケージ。関数への引数として使用される任意の数のパラメータ (...インターフェース{}
) を渡すこともできます。
実用的なケース: 動的テンプレート
関数マッピングは、テンプレート エンジンに渡すためによく使用され、実行時に関数を動的に実行できるようにします。たとえば、HTML テンプレートを作成できます:
<h1>Hello, {{ greet "John" }}!</h1> <h1>{{ add 3 5 }}</h1>
次に、funcMap
を Go プログラムのテンプレート エンジンに渡します:
t, err := template.New("demo").Funcs(funcMap).ParseFiles("template.html") if err != nil { // 处理错误 } t.Execute(w, nil)
By pass funcMap
テンプレート エンジンに渡されると、テンプレート内の greet
関数と add
関数を使用して、「Hello, John!」と「8」を出力できます。
結論
引数として渡される関数マップは、Go でコードの再利用とカスタマイズを可能にする強力なテクニックです。関数マップを作成して関数に渡すことで、関数を動的に実行し、実行時のコードの動作をカスタマイズできます。
以上がパラメータとして渡される golang 関数マップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。