物理的な構造体を作成せずに Reflect.Type にアクセスする
Go では、問題に対するソリューションを動的にロードするには、物理的に構造体を作成せずに構造体の型にアクセスする必要があります。 。既存のソリューションでは型登録の前に構造体の作成とゼロ化が必須ですが、より効率的なアプローチが存在します。
reflect.TypeOf((*Struct)(nil)).Elem() を利用できます。手術。 nil ポインターを作成することにより、スペースの割り当てが回避されます。 Elem メソッドは、ポインター、配列、スライス、チャネル、およびマップから要素タイプを取得します。
たとえば、ソルバーの動的な読み込みを可能にする、提供されている SolutionRegistry について考えてみましょう。 「プロジェクトオイラー」問題の場合。構造体型を登録するには、現在の実装では構造体の作成と初期化が必要です。
type DummySolution struct {
data [100 * 1024 * 1024 * 1024]uint8
}
このプロセスを最適化するには、DummySolution のインスタンスを作成する代わりに、reflect.TypeOf((*DummySolution)(nil)).Elem() を利用できます。 ] タイプを取得するには:
func Register(sol Solution) {
solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem())
}
この手法により、将来の動的読み込みのために型を登録しながら、物理的な構造体のインスタンス化の必要性が効果的に排除されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3