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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 07:04:02427ブラウズ

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

カスタム型のマップ キーの制限

マップ、スライス、関数などの特定の型は、本質的にマップ キーとして適していません。ただし、開発者によっては、特定のカスタム タイプがマップ キーとして使用されるのを明示的に禁止したい場合があります。

最初は、タイプ内のプライベート メンバーに依存することが解決策のように見えるかもしれませんが、このアプローチは効果的ではありません。この問題に対処するには、言語仕様に準拠した、より根本的な解決策が必要です。

マップ キーとしての型の使用を禁止する鍵は、比較演算子の要件に違反することにあります。仕様によれば、マップ キー タイプには完全に定義された比較演算子 == および != が必要です。したがって、比較不可能な型のフィールドを含めることで、型全体を実質的に比較不可能にすることができます。

たとえば、次の型を考えてみましょう。

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

フィールドの追加notComparable をスライス タイプと指定すると、MyType 全体が比較不能になり、マップ キーとして使用できなくなります。これは、スライスを比較できないためです。

m := map[MyType]int{} // Compile-time error: invalid map key type MyType

比較不可能なフィールドを導入すると、さらなる影響が生じる可能性があることに注意してください。たとえば、== や != などの演算子を使用して型の値を比較できなくなります。ただし、型を慎重に設計することで、その型がマップ キーとして使用されるのを防ぎながら、特定のフィールドの比較可能性を維持することができます。

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

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