「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go 1.18 ジェネリックでインデックス可能な型を効果的に制限するにはどうすればよいですか?

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

2024 年 11 月 19 日に公開
ブラウズ:814

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

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

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

インデックス可能な制約

型パラメーターをインデックス可能な型に制限するには、次の制約を共用体とともに使用することを検討してください:

type Indexable interface {
    ~[]byte | ~string
}

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

上記の制約はバイトおよび文字列のインデックス付けには機能しますが、マップや配列などの他のインデックス可能な型での使用には制限があります。 :

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

代替アプローチ

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

使用例

次の例は、インデックス可能制約の使用方法を示しています。

func GetAt[T Indexable](v T, i int) byte {
    return v[i]
}

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

結論

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3