質問:
Golang では、すべてのインターフェイスをプログラムで識別することは可能ですか?指定されたインターフェイスを実装する構造体?これにより、コード内で構造体の名前をハードコーディングすることなく、実行時にこれらの構造体の自動初期化と終了が可能になります。
答え:
残念ながら、短い答えはノーです。
説明:
Golang は厳密に型指定された言語です。つまり、リンカーはアプリケーションで使用されない型定義、メソッド、および関数を排除できます。したがって、型 (構造体 A など) がコード内のどこかで参照および利用されない限り、その型はコンパイルされたバイナリには含まれません。
さらに、特定のインターフェイスを実装している型の現在存在するインスタンスにアクセスすることもできません。
代替アプローチ:
必要な機能を実現するための代替アプローチは、グローバル マップまたはスライスを作成して、インタフェース。各構造体は、アプリケーションの起動時に自動的に呼び出される init 関数を使用して、このマップにインスタンスを追加できます。その後、必要に応じて、アプリケーションはマップを反復処理し、インスタンス上で必要なメソッドを呼び出すことができます。
このアプローチにより、構造体の動的な登録が可能になり、コード内で構造体の名前をハードコーディングする必要がなくなります。ただし、特定のタイプのインスタンスが複数ある場合は、その登録と登録解除を管理するために追加のメカニズムを実装する必要があります。
以上がGolang のインターフェイスのすべての実装をプログラムで検索する方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。