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."
この例では、*MyStruct のインスタンスでメソッド MyMethod が呼び出されます。
リフレクション ベースのアプローチ
構造体メソッドを名前で呼び出すためのリフレクション ベースのアプローチを次に示します。
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{}) }
このアプローチは、 struct のインスタンスを表す Value オブジェクトを取得するには、reflect.ValueOf を使用します。次に、MethodByName() を使用して目的のメソッドを取得し、その後 Call() を使用してこのメソッドを呼び出します。
以上がリフレクションを使用して Go Struct メソッドを名前で呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。