ホームページ > バックエンド開発 > Golang > Go のマップ キーの型制約はバージョン 1.18、1.19、1.20 でどのように進化しましたか?

Go のマップ キーの型制約はバージョン 1.18、1.19、1.20 でどのように進化しましたか?

Patricia Arquette
リリース: 2024-12-22 15:49:14
オリジナル
430 人が閲覧しました

How Have Go's Type Constraints for Map Keys Evolved Across Versions 1.18, 1.19, and 1.20?

Go ジェネリック: マップ キーの型制約

Go1.18 では、マップ キーとして使用できる汎用リンク リストを定義「Cons[int] は比較可能なものを実装していません。」というエラーで失敗します。これは、マップ キーが同等のインターフェイスを実装するという厳格な要件によるもので、パニックに陥ることなく等価性チェック (== および !=) を確実にサポートします。

Go 1.20 Update

Go 1.20 では、同等の制約がマップ キーの正しい包括的制約とみなされるようになりました。 Go 仕様に従って比較できるとみなされる型は、たとえ比較がパニックを起こす可能性がある場合でも、制約を満たします。これにより、仕様に従って比較できる型と厳密に比較できる型の間の不一致が解決されます。

Go 1.18 と 1.19 の考慮事項

Go 1.18 と 1.19 では、比較可能な制約は、パニックを起こすことなく == と != をサポートする厳密に比較可能な型によってのみインスタンス化できます。これはインターフェースを除外しました。等価演算子をサポートしているにもかかわらず、インターフェイスは動的な型と値が比較されるため、比較可能なものを実装していませんでした。これは、List[X] 型のフィールドを含む、提供された Cons 構造体が同等のものを実装できないことを意味します。

代替制約

この制限に対処するには、次のようにします。同等のものを埋め込むカスタム制約は、インターフェイス フィールドを使用する代わりにマップキー構造体によって定義および実装できます。例:

type List interface {
    comparable
    isList() bool
}
ログイン後にコピー

結論として、同等の制約が Go 1.20 のマップ キーに対して推奨される型制約になりました。 Go 1.18 および 1.19 では、無限の型セットが原因で、インターフェイスを同等のものでインスタンス化できませんでした。同等のものを埋め込むカスタム制約を代替手段として使用できます。

以上がGo のマップ キーの型制約はバージョン 1.18、1.19、1.20 でどのように進化しましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート