從介面類型取得方法名稱
在程式設計世界中,反射允許在運行時存取有關類型和物件的資訊。常見的場景是從介面類型檢索方法名稱。假設您有以下介面定義:
<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中文網其他相關文章!