Go での動的インターフェイス実装のリフレクション
Go のリフレクションは、実行時のコードの検査と操作を可能にする強力なツールです。提起された質問の 1 つは、リフレクションを使用して、特定のインターフェイスを実装する新しい関数を作成できるかどうかです。
問題ステートメント
課題は、リフレクションを使用することです。 RPC スタイルのメソッドを定義するインターフェイスを実装します。たとえば、次のようなインターフェイスについて考えてみましょう。
type MyService interface { Login(username, password string) (sessionId int, err error) HelloWorld(sessionId int) (hi string, err error) }
目標は、メソッド呼び出しを RPC 呼び出しに変換し、入力をマーシャリングし、結果をアンマーシャリングすることによって、リフレクションを使用してこのインターフェイスを実装することです。ただし、入力パラメータのスライスをインターフェイスとして取得するだけでは、リフレクション ベースの関数を使用してインターフェイスを実装する値を動的に作成するには不十分です。
解決策
残念ながら、リフレクションを介してメソッドが接続された型を作成し、その型のオブジェクトをインスタンス化することはできません。安全でないパッケージはいくつかの可能性を提供する可能性がありますが、これは困難で非効率なアプローチです。
代替
リフレクションに頼る代わりに、根本的な問題に対する代替ソリューションを検討することを検討してください。解決しようとしている特定の問題についての詳細を提供すると、コミュニティがより適切なアプローチを提案するのに役立ちます。
最近の開発
Go バージョン 1.5 とその後、インターフェイスを動的に実装する関数を作成する機能を提供する、reflect.FuncOf と Reflect.MakeFunc が導入されました。これにより、提示された問題に対する実用的かつ効率的な解決策が提供されます。
以上がReflection は RPC スタイルのメソッドの Go インターフェイスを動的に実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。