Go でメソッドを動的に作成できますか?
メソッドはレシーバーを備えた関数であり、メソッドを特定の型に関連付けることができます。 reflect.MakeFunc を使用して関数を動的に作成することは可能ですが、メソッドについてはどうすればよいでしょうか?
答え:
いいえ、Go は動的メソッドの作成をサポートしていません。レシーバーのタイプは、レシーバーで使用できるメソッドのセットを定義します。実行時にこのセットを変更するには、実行時のインターフェイス実装チェックが必要です。
ただし、次の回避策があります:
Reflect パッケージをフォークする:
独自のバージョンのリフレクト パッケージを使用する場合は、型にアタッチされたメソッドを表す値を構築することで、メソッドの作成をシミュレートできます。ただし、これによって型のメソッド セットが実際に変更されるわけではありません。
メソッド ポインターの交換:
Go は仮想メソッド ディスパッチ テーブルを具体的な値に埋め込みませんが、インターフェイス値に存在します。 Reflect.nonEmptyInterface の itab フィールドを操作して、メソッド ポインタを動的に交換できます。ただし、これは Go の内部構造についての深い理解を必要とする複雑な操作です。
以上がGo はメソッドを動的に作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。