Go 1.18 のジェネリクスは、コンテナ関数とコレクション操作を改善します: コンテナ関数ジェネリクスを使用すると、任意のスライス要素を新しいスライスにマップするマップ関数など、関数がさまざまなデータ型を共通の方法で操作できるようになります。集合演算ジェネリックにより、積集合、和集合、差分などの演算が簡素化され、任意の 2 つの集合の積集合を見つける Intersection 関数など、さまざまなデータ型で同じ関数を使用できるようになります。ジェネリックの利点には、コードの再利用性、スケーラビリティ、安全性が含まれます。これにより、さまざまなデータ型で動作する共通関数を作成できるようになり、新しいデータ型や関数のサポートを簡単に追加でき、型エラーを防止してコードの堅牢性が確保されます。
Go 1.18 バージョンで導入されたジェネリック機能は、Golang コンテナ関数とコレクションに大きなメリットをもたらしました。オペレーション コードの再利用性、拡張性、セキュリティを強化する大幅な改善。
ジェネリックを使用すると、コンテナ関数 (map
、filter
、reduce
など) を使用できます。型パラメータを明示的に指定せずに動作する一般化された方法。これにより、さまざまなデータ型をシームレスに操作する関数を作成できるようになります。
たとえば、次の map
関数は、任意のスライス内の要素を新しいスライスにマップできるジェネリックスで記述されています。
func Map[T, U any](s []T, f func(T) U) []U { r := make([]U, len(s)) for i, v := range s { r[i] = f(v) } return r }
ジェネリックスは、交差、和集合、差分などの集合演算も大幅に簡素化します。特殊な実装を作成せずに、同じ関数セットを使用してさまざまなデータ型を処理できます。
たとえば、次の Intersection
関数はジェネリックスで記述されており、2 つの任意のセットの共通部分を見つけることができます:
func Intersection[T comparable](s1, s2 []T) []T { m := make(map[T]bool) for _, v := range s2 { m[v] = true } var r []T for _, v := range s1 { if _, ok := m[v]; ok { r = append(r, v) } } return r }
特定のクエリのドキュメントを含むスライスを検索する必要がある検索エンジンの例を考えてみましょう。ジェネリックスを使用すると、ドキュメント タイプ (TextDocument
、HtmlDocument
など) に基づいてさまざまな種類のドキュメントを処理できる Search
関数を作成できます。
func Search[T TextDocument | HtmlDocument](docs []T, query string) []T { var r []T for _, d := range docs { if strings.Contains(d.Content, query) { r = append(r, d) } } return r }
以上がGolang ジェネリックはコンテナ関数とコレクション操作にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。