はじめに
Go ジェネリックスを探索する場合、開発者は問題に遭遇する可能性があります> などの順序演算子を利用しようとすると、比較可能な制約を満たす型を受け入れる関数内。この記事では、この非互換性の背後にある理論的根拠を掘り下げ、考えられる解決策を検討します。
比較可能な制約
Go 言語仕様で定義されている比較可能な制約は、次の型に適用されます。等価演算子 (== および !=) をサポートします。これには、比較可能なフィールドを持つ配列や構造体など、マップ キーとして利用できる型が含まれます。
順序付け演算子
Go 言語仕様では「比較演算子」という用語が使用されています。 " 等価演算子と順序付け演算子の両方を包含するために、仕様はそれらが適用される型を明確に区別しています。具体的には、> のような順序付け演算子です。 <
Comparable との非互換性
残念ながら、比較可能な制約は、型が順序付け演算子をサポートすることを意味するものではありません。これは、次のエラー メッセージが表示されることから明らかです: 「無効な操作: t1 > t2 を比較できません (演算子 > T で定義されていません)。」
Solutions
Go 1.21 以降
Go バージョンの場合1.21 以降では、開発者は標準ライブラリによって導入された cmp.Ordered 型制約を利用できます。この制約とその関連関数である Less と Compare は、順序付けされた型の比較を容易にします。
Go 1.18 から 1.20
Go のバージョン 1.18 から 1.20 の場合、制約はgolang.org/x/exp パッケージの .Ordered 制約は、順序付けを伴う比較に利用できます。演算子。
以上がGo ジェネリックの「比較可能な」制約を順序付け演算子で使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。