Go のジェネリック プログラミングでは型制約が導入されており、これによりジェネリック関数やデータ構造で使用される型に特定の要件を強制することができます。 。ただし、ジェネリック型をマップ キーとして使用すると、いくつかの制限が生じます。
提供されたコード スニペット内:
package main import "fmt" type List[X comparable] interface { isList() }
型 X の要素が比較可能であることを要求する型制約を持つ汎用リンク リストを定義します。これにより、リスト要素をマップ キーとして使用できるようになります。
ただし、Cons[int] の具体的なインスタンスをマップ キーとして使用し、その値 (つまり、fmt.Println(id) にアクセスしようとすると、 (x)))、コンパイル エラーが発生します: Cons[int] は比較可能なものを実装していません。
Go では、事前に宣言された比較可能な制約により、実行時にパニックを引き起こすことなく型が等価演算子 (== および !=) をサポートすることが保証されます。この制約はマップ キーに適用されます。つまり、確実に比較できる型のみをキーとして使用できます。
この問題の解決策は、事前に宣言された比較可能な制約を利用することです。比較可能な制約:
type List[X comparable] interface { isList() }
この制約は、マップ キーが厳密に比較されることを保証し、キー作成中の潜在的なパニックを回避します。
マップ キーに弱い型制約を使用するのは直感的に思えるかもしれませんが、Go では事前に宣言された比較可能な制約が適切かつ効率的な選択です。これにより、キーの比較の信頼性が保証され、比較できない型に関連する潜在的な実行時エラーが回避されます。
以上がGo の同等の制約は、ジェネリック プログラミングにおいて信頼性の高いマップ キーをどのように保証できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。