Go で名前で構造体メソッドを呼び出す
この質問は、Go で名前で構造体のメソッドを呼び出す可能性を検討します。質問者は、CallFunc("MyStruct", "MyMethod") の形式をとる解決策を求めます。この要件に対処するために、Go でのリフレクションの使用について詳しく説明します。
値とメソッドのリフレクション
メソッドを名前で呼び出すための鍵は、次のとおりです。リフレクトパッケージを利用します。関数reflect.ValueOfは、変数の値をカプセル化するreflect.Valueを生成できます。構造体の場合、構造体自体を表す値、または構造体へのポインターを取得できます。
reflect.Value を取得したら、MethodByName メソッドを使用して名前でメソッドを検索できます。これにより、識別されたメソッドを表すreflect.Method オブジェクトが返されます。
Putting It All Together
メソッドを名前で呼び出すプロセスを完了するには、次のように呼び出すことができます。 Reflect.Method の Call メソッド。これには、呼び出されたメソッドに渡されるパラメーターを表す、reflect.Value オブジェクトの配列が引数として必要です。
提供されたコード例では、T 構造体には Foo メソッドがあります。リフレクションを使用してこのメソッドを呼び出すには、&t (T インスタンスへのポインター) のreflect.Value を取得し、MethodByName を使用して Foo メソッドを見つけ、最後に Call.
package main import "fmt" import "reflect" type T struct {} func (t *T) Foo() { fmt.Println("foo") } func main() { var t T reflect.ValueOf(&t).MethodByName("Foo").Call([]reflect.Value{}) }
で呼び出します。このコードを実行すると、「foo」が出力され、Foo メソッドの名前による呼び出しが成功したことが示されます。このアプローチは、実行時に構造体とそのメソッドを動的に操作するための多用途な方法を提供します。
以上がリフレクションを使用して Go Struct メソッドを名前で呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。