関数を引数として渡す: Golang のメタプログラミング アプローチ
ご存知のとおり、Golang 関数は第一級の値であり、動的言語で一般的なメタプログラミングのトリック。関数を引数として別の関数に渡すには、Golang の関数値に対する固有のサポートを利用するだけです。以下に例を示します。
package main import "fmt" func someFunction1(a, b int) int { return a + b } func someFunction2(a, b int) int { return a - b } func someOtherFunction(a, b int, f func(int, int) int) int { return f(a, b) } func main() { fmt.Println(someOtherFunction(111, 12, someFunction1)) fmt.Println(someOtherFunction(111, 12, someFunction2)) }
このプログラムを実行すると、次の出力が生成されます。
123 99
ここで、関数の選択が実行時に依存するシナリオを考えてみましょう。既知の値のみ。これを処理するには、関数名とそれぞれの関数ポインターを関連付けるマップを作成します。
m := map[string]func(int, int) int{ "someFunction1": someFunction1, "someFunction2": someFunction2, } ... z := someOtherFunction(x, y, m[key])
このようにして、関数を名前で引数として渡し、必要な関数を動的に選択できます。ランタイム。
以上がGo で関数を引数として渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。