依名稱呼叫Go 結構體及其方法
在Go 中處理反射時,可能會遇到需要呼叫結構體的方法的情況。結構體按其名稱。我想到的是 Reflect 套件中的 MethodByName() 函數,但它的用法可能不會立即顯而易見。本文旨在提供一種按名稱呼叫結構體及其方法的簡化方法。
MethodByName() 和 StructByName()
需要 StructByName() 的誤解在呼叫 MethodByName() 之前是不正確的。 MethodByName() 可以直接用來檢索所需的方法。
按名稱呼叫結構體方法
下面是一個範例,說明如何依名稱呼叫結構體方法:
type MyStruct struct { //some feilds here } func (p *MyStruct) MyMethod() { println("My statement.") } // Notice there is no StructByName() function call here CallFunc("MyStruct", "MyMethod") // prints "My statement."
在此範例中,方法MyMethod 在*MyStruct的實例上調用,該實例是
基於反射的方法
這是一種基於反射的方法,透過名稱調用結構體方法:
package main import "fmt" import "reflect" type T struct { } func (t *T) Foo() { fmt.Println("foo") } func main() { t := &T{} reflect.ValueOf(t).MethodByName("Foo").Call([]reflect.Value{}) }
此方法利用Reflect.ValueOf 取得一個Value 對象,該物件代表struct 的實例。然後使用 MethodByName() 檢索所需的方法,隨後使用 Call() 呼叫該方法。
以上是如何使用反射按名稱呼叫 Go 結構體方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!