Go でのパラメーターと戻り値の型による関数のフィルター処理
関数のコレクションがあり、それらを選択する必要があるシナリオを考えてみましょう。整数を返す、または整数を入力パラメータとして受け取るなど、特定の基準を満たしていること。このタスクは、Golang のリフレクションを使用して実行できます。
リフレクト パッケージは、Go の型と値の基礎となるメタデータへのアクセスを提供します。 Reflect.ValueOf と Reflect.Type を利用することで、関数の型を検査し、そのパラメーターと戻り値に関する情報を取得できます。
整数を返す関数を選択するには、リスト内の各関数を反復処理し、次を使用します。値を取得するには、reflect.ValueOf を使用します。次に、reflect.Type を使用して関数の型を取得し、NumOut と Out を使用してその戻り値を調べます。戻り値の型が "int" の場合、その関数を含めるのに "良い" とマークします。
同様に、パラメータとして整数を取る関数を選択するには、関数の NumIn パラメータを繰り返し処理し、 Reflect.In を使用して各入力の型を確認します。入力型の中に「int」が見つかった場合、その関数は「良好」とマークされます。
このアプローチの使用方法を示すサンプル プログラムを次に示します。
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) funcs[0] = func(a int) int { return a + 1 } funcs[1] = func(a string) int { return len(a) } funcs[2] = func(a string) string { return ":(" } for _, fi := range funcs { f := reflect.ValueOf(fi) functype := f.Type() good := false for i := 0; i < functype.NumIn(); i++ { if functype.In(i).String() == "int" { good = true break } } for i := 0; i < functype.NumOut(); i++ { if functype.Out(i).String() == "int" { good = true break } } if good { fmt.Println(f) } } } ```` </code>
以上がリフレクションを使用してパラメータと戻り値の型に基づいて Go 関数をフィルタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。