「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > インスタンスを作成せずに Go 構造体のタイプにアクセスするにはどうすればよいですか?

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

2024 年 11 月 15 日に公開
ブラウズ:856

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 について考えてみましょう。 「プロジェクトオイラー」問題の場合。構造体型を登録するには、現在の実装では構造体の作成と初期化が必要です。

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