物理的な構造体を作成せずに Reflect.Type にアクセスする
Go では、問題に対するソリューションを動的にロードするには、物理的に構造体を作成せずに構造体の型にアクセスする必要があります。 。既存のソリューションでは型登録の前に構造体の作成とゼロ化が必須ですが、より効率的なアプローチが存在します。
reflect.TypeOf((*Struct)(nil)).Elem() を利用できます。手術。 nil ポインターを作成することにより、スペースの割り当てが回避されます。 Elem メソッドは、ポインター、配列、スライス、チャネル、およびマップから要素タイプを取得します。
たとえば、ソルバーの動的読み込みを可能にする、提供されている SolutionRegistry を考えてみましょう。 「プロジェクトオイラー」問題の場合。構造体型を登録するには、現在の実装では構造体の作成と初期化が必要です。
<code class="go">type DummySolution struct { data [100 * 1024 * 1024 * 1024]uint8 }</code>
このプロセスを最適化するには、DummySolution のインスタンスを作成する代わりに、reflect を利用できます。 .TypeOf((*DummySolution)(nil)).Elem() を使用してその型を取得します。
<code class="go">func Register(sol Solution) { solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem()) }</code>
この手法により、将来の動的読み込みのためにその型を登録しながら、物理的な構造体のインスタンス化の必要性が効果的に排除されます。 .
以上がインスタンスを作成せずに Go 構造体のタイプにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。