リフレクションを使用してパラメータと戻り値の型に基づいて Go 関数をフィルタリングする方法

Mary-Kate Olsen
リリース: 2024-10-29 00:15:02
オリジナル
205 人が閲覧しました

How to Filter Go Functions Based on Parameters and Return Types Using Reflection?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!