ホームページ > バックエンド開発 > Golang > パラメータとして渡される golang 関数マップ

パラメータとして渡される golang 関数マップ

PHPz
リリース: 2024-04-22 11:42:02
オリジナル
964 人が閲覧しました

Go では、関数マップを関数のパラメータとして渡すことができ、コードの再利用とカスタマイズ機能を提供します。関数マップを作成します。関数名をキーとして関数自体を使用して、map[string]interface{} タイプを使用します。値として。引数として渡す: 関数の引数リストで funcMap タイプを使用して、関数マップを受け入れます。関数の実行:reflect パッケージを介して関数マップから関数を取得し、可変引数を使用して呼び出します。実際のケース: 関数マッピングをテンプレート エンジンに渡して、実行時にテンプレート関数を動的に実行できます。

パラメータとして渡される golang 関数マップ

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート