カスタム型のマップ キーの制限
マップ、スライス、関数などの特定の型は、本質的にマップ キーとして適していません。ただし、開発者によっては、特定のカスタム タイプがマップ キーとして使用されるのを明示的に禁止したい場合があります。
最初は、タイプ内のプライベート メンバーに依存することが解決策のように見えるかもしれませんが、このアプローチは効果的ではありません。この問題に対処するには、言語仕様に準拠した、より根本的な解決策が必要です。
マップ キーとしての型の使用を禁止する鍵は、比較演算子の要件に違反することにあります。仕様によれば、マップ キー タイプには完全に定義された比較演算子 == および != が必要です。したがって、比較不可能な型のフィールドを含めることで、型全体を実質的に比較不可能にすることができます。
たとえば、次の型を考えてみましょう。
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 サイトの他の関連記事を参照してください。