インターフェース値でのメソッドの動的呼び出し
Go では、インターフェース値を扱うときにオブジェクトのメソッドを動的に呼び出すことが困難になることがあります。{}この問題は、インターフェイスの基になる型が明示的に不明な場合に発生します。
提供されたコード例では、オブジェクトが Test である場合、Pass() 関数は、Test 型のオブジェクトに対する Finish() メソッドの呼び出しに失敗します。インターフェース値内に埋め込まれます。{}これは、オブジェクトがインターフェースとして参照されている場合、リフレクション API はオブジェクトのアドレスに直接アクセスできないためです。
この問題を解決するには、インターフェースの基礎となる値の型を考慮する必要があります。さらに、メソッドは値レシーバーまたはポインター レシーバーのいずれかを使用して実装できるため、両方のケースを動的に処理する必要があります。
リフレクションを使用すると、インターフェイスの基礎となる値 (値) を取得し、それへのポインターを作成できます ( ptr)。次に、値とポインター型の両方でメソッドの存在を確認できます。
変更された CallMethod() 関数は、次のシナリオを効果的に処理します。
このソリューションにより、動的に呼び出すことができます。オブジェクトのメソッドは、基になる値やレシーバーの型に関係なく、値とポインターの両方の型を操作します。
以上がGo で Interface 値のメソッドを動的に呼び出すにはどうすればよいですか?{}の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。