Go では、構造体のメソッドを名前で呼び出す機能により、優れた柔軟性が得られます。 MethodByName() 関数は存在しますが、構造体には直接適用できません。
これを実現するには、次の手順に従います。
まず、reflect.ValueOf(&structInstance) を使用して構造体の値を取得します。これにより、構造体の型情報へのアクセスが可能になります。
構造体の型で Type.MethodByName() を使用して、メソッドのリフレクションを取得します。これには、呼び出す正確なメソッド名を知っている必要があります。
メソッドを取得したら、必要に応じて引数のスライスを指定して Call() メソッドを呼び出し、メソッドを実行します。
次のコードを考えてみましょう。 :
type MyStruct struct { // some fields } func (ms *MyStruct) MyMethod() { fmt.Println("My statement.") } func CallMethodByName(s interface{}, methodName string) { v := reflect.ValueOf(s) m := v.Type().MethodByName(methodName) m.Call([]reflect.Value{}) } func main() { ms := MyStruct{} CallMethodByName(&ms, "MyMethod") // Prints "My statement." }
この例では、必要な機能を模倣するカスタム関数 CallMethodByName() を定義します。これには、メソッドを名前で検索して呼び出すために必要な手順がラップされています。
これらの手順に従うことで、Go の構造体のメソッドを動的に呼び出すことができ、コードの動作の柔軟性と制御が向上します。
以上がリフレクションを使用して Go 構造体のメソッドを名前で呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。