Go ジェネリックで型をインデックス可能な型に制約する
Go 1.18 では、ジェネリックの導入により、型安全性の新しい可能性が開かれました。よく発生するシナリオの 1 つは、許可される型を、配列、スライス、マップ、文字列などのインデックス作成をサポートする型に制限する必要があることです。
インデックス可能性は制約ですか?
インデックス付けは多くの型にとって望ましい機能ですが、それ自体は直接指定できる制約ではありません。 Go ジェネリックの制約は、許可される型を定義する型セットを使用して指定されます。
意味のあるインデックス作成制約
共用体型セットを使用する唯一の意味のあるインデックス作成制約は Indexable です。これにより、許可されるタイプが []byte または string に制限されます。この制約により、両方の型を受け入れ、インデックス付け操作を実行する汎用関数の定義が可能になります。
インデックス付け制約の制限
配列やマップなど、他の潜在的なインデックス可能な型共用体型セット内で意味のある組み合わせを行うことはできません。共用型で許可される操作は、すべてのメンバー型でサポートされている操作のみであり、制約では、インデックス作成に同じキーと要素の型が必要です。
実際の実装
結果唯一の実用的なインデックス作成制約は、[]byte および string に対して Indexable です。これにより、指定されたインデックスのバイトを返す、回答で提供されている GetAt 関数など、両方のタイプで動作する汎用関数が可能になります。
補足
Indexable 制約にはコア タイプがないため、範囲操作がサポートされていないことに注意することが重要です。ただし、[]byte 型と string 型は両方とも範囲機能を備えており、範囲操作が必要な場合に使用できます。
以上がGo ジェネリックは `[]byte` と `string` を超えたインデックス作成制約を効果的に適用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。