型がマップ キーとして機能しないようにする
特定のシナリオでは、特定の型がマップ キーとして使用されることが望ましくない場合があります。 。プライベート メンバーを所有しているにもかかわらず、そのような型は引き続きこの機能で使用できます。この記事では、そのような事態を防ぐ方法について説明します。
型がマップ キーとして機能するための基本的な条件は、そのすべてのフィールドが比較可能である必要があることです。 効果的な解決策の 1 つは、型構造に比較不可能なフィールドを含めることです。 スライス、マップ、関数などの型は比較できないため、この型のフィールドを追加すると、事実上、囲んでいる型の使用が妨げられます。
例:
type MyType struct { A *A b b preventUseAsKey []int }
MyType をマップ キーとして利用しようとすると、
m := map[MyType]int{}
のようなコンパイル時間になります。 error:
invalid map key type MyType
ただし、このアプローチには潜在的な欠点があることに注意することが重要です。型が比較不可能になります。 これは、比較演算子 (例: ==、!) を意味します。 =) は変更された型には適用できなくなり、特定のユースケースに影響を与える可能性があります。
マップ キーの使用を制限しながら比較可能性を維持するには、ラッパー型を使用できます。ラッパー型は元の型を埋め込みますが、比較できないフィールドを追加します。これにより、ラッパー型をマップキーとして使用することを禁止しながら、埋め込み型に対して比較演算を実行できるようになります。
以上がGo で型がマップ キーとして使用されないようにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。