インスタンス化を行わずに構造体型を取得する
プロジェクト オイラー問題の解決策を動的に読み込むことを目的としたプロジェクトで、物理的に作成せずに構造体を構築することには課題が伴います。現在のソリューションでは、提供されている Go コード スニペットのレジストリ構造で例示されているように、構造体の手動のインスタンス化とゼロ化が必要です。
この制限を克服する 1 つの方法は、nil ポインター イディオムを利用することです。目的の構造体への nil ポインターを作成すると、構造全体にメモリを割り当てることなく、その Reflect.Type インスタンスを取得できます。その後、reflect パッケージの Elem メソッドを使用して、要素の型にアクセスできるようになります。この場合、要素の型は実際の構造体の型に対応します。
たとえば、コード スニペットに対する次の変更を検討してください。
<code class="go">import "reflect" ... func main() { // Get the type of DummySolution without instantiation dummySolutionType := reflect.TypeOf((*DummySolution)(nil)).Elem() fmt.Println("DummySolution type:", dummySolutionType) }</code>
この変更されたコードでは、DummySolution への nil ポインターを作成し、reflect.TypeOf を使用してそのreflect.Type インスタンスを取得します。次に、Elem を使用して、DummySolution 構造体の実際の型である要素型を取得します。この手法を使用すると、実際にインスタンスを作成せずに構造体型にアクセスできるため、当初の課題が解決されます。
以上がインスタンス化せずにGoで構造体の「reflect.Type」にアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。