Golang: インターフェイスを実装したインスタンスの検出
Golang では、多くの場合、特定のタイプのインスタンスまたは実装されているインスタンスに対して操作を実行することが望ましいです。特定のインターフェイス。ただし、言語の厳密な型指定により、実行時に特定の基準を満たすすべてのインスタンスを識別するという課題が生じます。
問題の概要
次の使用例を考えてみましょう:
解決策の議論
Golang の型システムでは、実行時にすべての構造体名を取得することはできません。インターフェイスを実装する型。これは、Go が静的に型付けされており、コンパイラーが未使用の型とメソッドを削除して結果のバイナリを最適化するためです。
代替アプローチ
代替ソリューションは、グローバルを維持することです。インターフェースを実装するインスタンスに識別子を関連付けるマップまたはスライス。各構造体は、このグローバル コレクションにインスタンスを追加することで自身を初期化できます。
例:
<code class="go">var instMap = map[string]StartStopper type A struct {} func init() { instMap["A"] = new(A) }</code>
起動時と終了時に、プログラムはグローバル コレクションを反復処理して、適切なメソッドを呼び出すことができます。
複数インスタンスの拡張
各タイプの複数のインスタンスが存在できる場合、新しいインスタンスが作成されたり削除されたりするたびに、グローバル コレクションを更新する必要があります。もう使われていません。これにより、ガベージ コレクターによる適切な処理が保証されます。
以上が実行時に Go インターフェイスを実装するインスタンスを動的に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。