インスタンスを作成せずに Go 構造体のタイプにアクセスするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-24 20:52:29
オリジナル
116 人が閲覧しました

How Can I Access the Type of a Go Struct Without Creating an Instance?

物理的な構造体を作成せずに 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!