ホームページ  >  記事  >  バックエンド開発  >  Go 1.18 ジェネリックでインデックス可能な型を効果的に制限するにはどうすればよいですか?

Go 1.18 ジェネリックでインデックス可能な型を効果的に制限するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 03:49:28775ブラウズ

How Can We Effectively Constrain Indexable Types in Go 1.18 Generics?

Go 1.18 ジェネリックのインデックス制約

Go 1.18 でのジェネリックの導入により、開発者は特定のアルゴリズムを実装する機会が得られます。種類。一般的な要件の 1 つは、配列、スライス、マップ、文字列などのインデックス付けをサポートする型を使用することです。

インデックス可能な制約

型パラメーターをインデックス可能な型に制限するには

<code class="go">type Indexable interface {
    ~[]byte | ~string
}</code>

インデックス可能な制約の制限

上記の制約はバイトと文字列のインデックス作成には機能しますが、次の制約があります。マップや配列などの他のインデックス可能な型で使用する場合:

  • Maps: 共用体には、同一のキーと要素の型を持つマップ型のみを含める必要があります。この制限により、異なるキーと値を持つマップを処理する必要がある汎用アルゴリズムでは実用的ではなくなります。
  • 配列: 配列の長さはその型の一部であるため、共用体では指定する必要があります。可能なすべての長さ。これは面倒で、範囲外エラーが発生しやすい可能性があります。

代替アプローチ

これらの制限のため、インデックス作成をサポートする唯一の実用的な共用体は次のとおりです。 []バイト |弦。この共用体ではインデックス付け操作が可能ですが、コア型がないため範囲操作はサポートされません。

使用例

次の例は、Indexable 制約の使用方法を示しています。

<code class="go">func GetAt[T Indexable](v T, i int) byte {
    return v[i]
}</code>

この関数はインデックス可能な値とインデックスを受け取り、指定されたインデックスのバイトを返します。

結論

Go 1.18 では次のことが可能です。共用体を使用して型をインデックス可能な型に制約する方法ですが、その制約の制限により、これは限られたユースケース、つまりバイトと文字列のインデックス付けでのみ実用的です。

以上がGo 1.18 ジェネリックでインデックス可能な型を効果的に制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。