型がマップ キーとして機能しないようにする
一部の型は本質的にマップ キーとして機能できますが、開発者はこれを防止したい場合があります。使用法。プライベートメンバーがそのような出来事を禁止すると想定していますが、これでは不十分であることがわかります。この記事では、マップ キーとして使用できないタイプをレンダリングするための最良の方法について説明します。
マップ キー タイプの比較
マップ タイプの技術仕様では、マップ タイプが以下の機能を備えていることが義務付けられています。 == および != 演算子による比較。これは、キーのタイプが関数、マップ、またはスライスであってはいけないことを意味します。この要件を利用することが、マップ キーの使用を防ぐ鍵となります。
比較不可能なフィールドの紹介
フィールドによって定義された構造体の値は、それらのすべてのフィールドが比較可能な場合にのみ比較可能です。 。したがって、比較できない型のフィールドを導入すると、構造体がマップ キーとして機能する資格が事実上失われます。便利なオプションは、明示的に incomparable として宣言されているため、スライス型のフィールドを追加することです。
コード例
提供された型に対する次の変更を検討してください。
<code class="go">type MyType struct { A *A b b notComparable []int }</code>
notComparable フィールドを含めると、MyType をマップ キーとして使用しようとすると、コンパイル時エラーが発生します:
<code class="go">m := map[MyType]int{}</code>
コンパイル エラー: 「無効なマップ キー」 type MyType"
追加の考慮事項
型のマップ キーの使用を排除すると、その値を比較するオプションも排除されることに注意してください。これは比類のない分野の導入によるものです。この問題を軽減するには、ラッパー型を導入して、元の型との比較可能性を維持しながら、比較不可能なフィールドを隠すことができます。
以上が以下にいくつかのタイトルのオプションを示します。それぞれが記事の異なる側面を強調しています。 問題に焦点を当てる: * Go で型がマップ キーとして使用されないようにする方法は? * なぜ MyStruct を使用できないのですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。