Go の文字列からの関数へのポインター
メタプログラミング、つまり実行時にコード自体を操作する機能は、プログラミングにおける強力なテクニックです。 Go では、文字列として提供される名前に基づいて関数へのポインターにアクセスする必要があるという側面が考えられます。
ソリューション
とは異なります。動的言語、Go 関数は第一級の値とみなされます。これは、関数を他の関数に引数として渡すことができ、複雑なメタプログラミング手法の必要性を排除できることを意味します。
これを示すために、次のコード スニペットを考えてみましょう。
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
これは、関数をその名前に基づいて引数として someOtherFunction に渡す方法を示します。
カスタム関数の選択
If関数の選択は、実行時にのみ判明する値に依存します。マップを使用して、関数名を対応する関数に関連付けることができます。ポインタ:
m := map[string]func(int, int) int{ "someFunction1": someFunction1, "someFunction2": someFunction2, } ... z := someOtherFunction(x, y, m[key])
以上が実行時に名前 (文字列) を使用して Go 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。