リフレクションを使用して Go のインターフェイスからメソッド名のリストを取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-30 09:15:27
オリジナル
882 人が閲覧しました

How do you retrieve a list of method names from an interface in Go using reflection?

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

Go では、リフレクションを使用して実行時にプログラムの内部構造を検査および操作できます。 。これには、メソッド名などのインターフェイス タイプに関する情報にアクセスする機能が含まれます。

次のインターフェイスについて考えてみましょう。

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

このインターフェイスのメソッド名のリストを取得するには、次のコマンドを使用します。 reflection:

  1. インターフェイス型のreflect.Typeを取得します:
<code class="go">t := reflect.TypeOf((*FooService)(nil)).Elem()</code>
ログイン後にコピー

この行は、具象型のreflect.Typeを取得します。 FooService インターフェースを実装します。

  1. メソッドの数を取得します:
<code class="go">for i := 0; i < t.NumMethod(); i++ {</code>
ログイン後にコピー

NumMethod() 関数は、メソッドの数を返します。

  1. メソッド名を取得します:
<code class="go">s = append(s, t.Method(i).Name)</code>
ログイン後にコピー

Method(i) 関数は、メソッドを表す Reflect.Method オブジェクトを返します。インデックス i で。このオブジェクトの Name フィールドには、メソッドの名前が含まれます。

結果のリストには、メソッド名 ["Foo1", "Foo2"] が含まれます。

説明:

  • (*FooService)(nil) 構文は、FooService インターフェイスの匿名インスタンスへのポインターを作成するために使用されます。これは、インターフェイスのreflect.Typeを取得するために必要です。
  • Elem()メソッドは、インターフェイスの型自体ではなく、インターフェイスを実装する具象型のreflect.Typeを返します。
  • NumMethod() 関数は、具象型が追加のメソッドを実装している場合でも、インターフェイスで宣言されたメソッドの数を返します。

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

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