Go のマッピング関数
Go では、マップはキーをそれぞれの値に関連付ける強力な方法を提供します。関数をマップする場合、通常、キーは関数の名前または識別子を表す文字列であり、値は関数参照です。
例:
次のように考えます。 Go プログラム:
func a(param string) { fmt.Println("parameter:", param) } m := map[string]func(string) { "a": a, } for key, value := range m { if key == "a" { value("hello") } }
この例では、マップ m を使用して、文字列キー "a" と関数参照の間のマッピングを保存します。 a.ループはマップを反復処理し、文字列「hello」を引数として渡して、「a」キーに関連付けられた関数を実行します。
さまざまな関数シグネチャの処理:
しかし、最初の試みで、異なる署名を持つ関数をマップに保存しようとしたときに問題が発生しました。これは、マップ内の値の型が func() として宣言されているためです。さまざまなシグネチャを持つ関数を処理するには、次の改訂された例で使用されているインターフェース{}など、インターフェースを値のタイプとして使用できます。
func f(p string) {} func g(p string, q int) {} m := map[string]interface{}{ "f": f, "g": g, } for k, v := range m { switch k { case "f": v.(func(string))("astring") // Explicit cast to type func(string) case "g": v.(func(string, int))("astring", 42) // Explicit cast to type func(string, int) } }
インターフェース{} タイプを使用することで、異なるシグネチャを持つ関数を含む、任意の型の値を格納するマップ。次に、ループ内で明示的な型キャストを使用して、それぞれのパラメーターを使用して関数を実行します。
以上がGo で異なるシグネチャを持つ関数をマッピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。