Go でのジェネリックスのアプリケーション シナリオ: コレクション操作: フィルター処理など、あらゆるタイプに適したコレクション操作を作成します。データ構造: キュー、スタック、マップなどの汎用データ構造を作成して、さまざまな種類のデータを保存および操作します。アルゴリズム: さまざまな種類のデータを処理できる、並べ替え、検索、リダクションなどの汎用アルゴリズムを作成します。
ジェネリックスは Go 1.18 で導入された主要な機能であり、型システムの型変数でジェネリックスを使用できるようになります。 。これにより、特に共通のデータ構造やアルゴリズムを実装する場合に、コードの再利用と冗長性の削減のための強力な機能が提供されます。
ジェネリックスを使用すると、任意の型 T に適用される集合演算を簡単に作成できます。例:
func Filter[T any](slice []T, pred func(T) bool) []T { var filtered []T for _, v := range slice { if pred(v) { filtered = append(filtered, v) } } return filtered }
ジェネリクスは、キュー、スタック、マップなどの一般的なデータ構造を記述するのに役立ちます。これらのデータ構造はさまざまなタイプのデータを保存および操作できるため、柔軟性が高まります。
type Queue[T any] struct { items []T } func (q *Queue[T]) Enqueue(item T) { q.items = append(q.items, item) } func (q *Queue[T]) Dequeue() T { item := q.items[0] q.items = q.items[1:] return item }
ジェネリックを使用すると、並べ替え、検索、リダクション操作などの一般的なアルゴリズムを作成することもできます。これらのアルゴリズムはさまざまな種類のデータを処理できるため、コードの再利用性と保守性が確保されます。
func Sort[T any](slice []T) []T { sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] }) return slice }
さまざまな種類のデータを含む Customer
構造体を考えてみましょう:
type Customer struct { ID int Name string Age int Score float64 }
ジェネリックスを使用して、任意のフィールドに基づいて顧客を並べ替える汎用 SortCustomers
関数:
func SortCustomers[T comparable](customers []Customer, field T) []Customer { sort.Slice(customers, func(i, j int) bool { return customers[i][field] < customers[j][field] }) return customers }
この関数は、以下に示すように、顧客 ID、名前、年齢、またはスコアに基づいて並べ替えることができます:
sortedByID := SortCustomers(customers, customers[0].ID) sortedByName := SortCustomers(customers, customers[0].Name)
以上がgolang でのジェネリックスの具体的なアプリケーション シナリオの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。