Go でリフレクションを使用してインターフェイス型からメソッド名を取得する方法は?

DDD
リリース: 2024-10-30 00:56:29
オリジナル
563 人が閲覧しました

How to Retrieve Method Names from an Interface Type using Reflection in Go?

インターフェイス型からメソッド名を取得する

プログラミングの世界では、リフレクションを使用すると、実行時に型とオブジェクトに関する情報にアクセスできます。一般的なシナリオの 1 つは、インターフェイス タイプからメソッド名を取得することです。次のインターフェイス定義があるとします。

<code class="go">type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}</code>
ログイン後にコピー

目的は、リフレクションを使用してメソッド名のリストを生成することです。この場合、["Foo1", "Foo2"].

解決策:

これを達成するには、次の手順が必要です:

  1. インターフェイス タイプの Reflect.Type を取得します:

    <code class="go">type FooService interface {...}
    t := reflect.TypeOf((*FooService)(nil)).Elem()</code>
    ログイン後にコピー

    この行は、基礎となる具象型であるインターフェイス FooService のリフレクション型を取得します。

  2. 次の型のメソッドを反復処理します。

    <code class="go">for i := 0; i < t.NumMethod(); i++ {</code>
    ログイン後にコピー

    NumMethod メソッドはメソッドの数を返し、各メソッドをループすることができます。

  3. 各メソッドの名前を取得します:

    <code class="go">name := t.Method(i).Name</code>
    ログイン後にコピー
  4. メソッド名をスライスに追加します:

    <code class="go">s = append(s, name)</code>
    ログイン後にコピー

    これにより、メソッド名がスライスに蓄積されます。

すべてをまとめる:

<code class="go">type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}

func main() {
    t := reflect.TypeOf((*FooService)(nil)).Elem()
    var s []string
    for i := 0; i < t.NumMethod(); i++ {
        name := t.Method(i).Name
        s = append(s, name)
    }
    fmt.Println(s) // Output: [Foo1 Foo2]
}</code>
ログイン後にコピー

以上がGo でリフレクションを使用してインターフェイス型からメソッド名を取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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