インターフェイス型からメソッド名を取得する
プログラミングの世界では、リフレクションを使用すると、実行時に型とオブジェクトに関する情報にアクセスできます。一般的なシナリオの 1 つは、インターフェイス タイプからメソッド名を取得することです。次のインターフェイス定義があるとします。
<code class="go">type FooService interface { Foo1(x int) int Foo2(x string) string }</code>
目的は、リフレクションを使用してメソッド名のリストを生成することです。この場合、["Foo1", "Foo2"].
解決策:
これを達成するには、次の手順が必要です:
インターフェイス タイプの Reflect.Type を取得します:
<code class="go">type FooService interface {...} t := reflect.TypeOf((*FooService)(nil)).Elem()</code>
この行は、基礎となる具象型であるインターフェイス FooService のリフレクション型を取得します。
次の型のメソッドを反復処理します。
<code class="go">for i := 0; i < t.NumMethod(); i++ {</code>
NumMethod メソッドはメソッドの数を返し、各メソッドをループすることができます。
各メソッドの名前を取得します:
<code class="go">name := t.Method(i).Name</code>
メソッド名をスライスに追加します:
<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 サイトの他の関連記事を参照してください。