Goでパラメータと戻り値の型に基づいてリストから関数を選択する方法は?

DDD
リリース: 2024-10-29 19:29:02
オリジナル
907 人が閲覧しました

How to Select Functions from a List Based on Parameter and Return Types in Go?

Go でリストから関数を選択する

Go では、スライスまたは配列を使用して関数のリストを作成できます。ただし、戻り値の型やパラメーターの型などの特定の基準に基づいて関数を選択するには、リフレクションを使用する必要があります。

関数が整数の引数を取るか整数を返すかを判断するには、reflect パッケージを使用して調べることができます。その型シグネチャ。これを実現する方法を示すコード例を次に示します。

<code class="go">package main

import (
    "fmt"
    "reflect"
)

func main() {
    funcs := make([]interface{}, 3, 3) // Use interface{} for any function type
    funcs[0] = func(a int) int { return a + 1 } // Accepts an int, returns an int
    funcs[1] = func(a string) int { return len(a) } // Accepts a string, returns an int
    funcs[2] = func(a string) string { return ":(" } // Accepts a string, returns a string

    for _, fi := range funcs {
        f := reflect.ValueOf(fi)
        functype := f.Type()
        hasIntParam := false
        hasIntReturn := false

        // Check function parameters for int type
        for i := 0; i < functype.NumIn(); i++ {
            if "int" == functype.In(i).String() {
                hasIntParam = true
                break
            }
        }

        // Check function return value for int type
        for i := 0; i < functype.NumOut(); i++ {
            if "int" == functype.Out(i).String() {
                hasIntReturn = true
                break
            }
        }

        // Print the function if it has integer parameter or return type
        if hasIntParam || hasIntReturn {
            fmt.Println(f)
        }
    }
}</code>
ログイン後にコピー

リフレクションを使用すると、リスト内の関数をイントロスペクトし、指定された条件を満たす関数を選択して出力できます。このコードは一目瞭然で、Go でこの問題を処理する方法を明確に示しています。

以上がGoでパラメータと戻り値の型に基づいてリストから関数を選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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