ホームページ > バックエンド開発 > Golang > Go で異なるシグネチャを持つ関数をマッピングするにはどうすればよいですか?

Go で異なるシグネチャを持つ関数をマッピングするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-10 22:15:14
オリジナル
856 人が閲覧しました

How Can I Map Functions with Different Signatures in Go?

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

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