ホームページ  >  記事  >  バックエンド開発  >  Go で型がマップ キーとして使用されないようにする方法は?

Go で型がマップ キーとして使用されないようにする方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 10:47:02941ブラウズ

 How to Prevent Types from Being Used as Map Keys in Go?

型がマップ キーとして機能しないようにする

特定のシナリオでは、特定の型がマップ キーとして使用されることが望ましくない場合があります。 。プライベート メンバーを所有しているにもかかわらず、そのような型は引き続きこの機能で使用できます。この記事では、そのような事態を防ぐ方法について説明します。

型がマップ キーとして機能するための基本的な条件は、そのすべてのフィールドが比較可能である必要があることです。 効果的な解決策の 1 つは、型構造に比較不可能なフィールドを含めることです。 スライス、マップ、関数などの型は比較できないため、この型のフィールドを追加すると、事実上、囲んでいる型の使用が妨げられます。

例:

type MyType struct {
   A *A
   b b
   preventUseAsKey []int
}

MyType をマップ キーとして利用しようとすると、

m := map[MyType]int{}

のようなコンパイル時間になります。 error:

invalid map key type MyType

ただし、このアプローチには潜在的な欠点があることに注意することが重要です。型が比較不可能になります。 これは、比較演算子 (例: ==、!) を意味します。 =) は変更された型には適用できなくなり、特定のユースケースに影響を与える可能性があります。

マップ キーの使用を制限しながら比較可能性を維持するには、ラッパー型を使用できます。ラッパー型は元の型を埋め込みますが、比較できないフィールドを追加します。これにより、ラッパー型をマップキーとして使用することを禁止しながら、埋め込み型に対して比較演算を実行できるようになります。

以上がGo で型がマップ キーとして使用されないようにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。