Scénarios d'application des génériques dans Go : Opérations de collecte : Créez des opérations de collecte adaptées à tout type, comme le filtrage. Structures de données : écrivez des structures de données à usage général telles que des files d'attente, des piles et des cartes pour stocker et manipuler divers types de données. Algorithmes : écrivez des algorithmes à usage général tels que le tri, la recherche et la réduction qui peuvent gérer différents types de données.
Les génériques sont une fonctionnalité majeure introduite dans Go 1.18, qui nous permet d'utiliser des variables de type dans le système de types. Cela offre de puissantes capacités de réutilisation du code et de réduction de la redondance, en particulier lors de la mise en œuvre de structures de données ou d'algorithmes communs.
En utilisant des génériques, nous pouvons facilement créer des opérations d'ensemble qui s'appliquent à n'importe quel type T. Par exemple :
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 }
Les génériques peuvent nous aider à écrire des structures de données courantes, telles que des files d'attente, des piles ou des cartes. Ces structures de données peuvent stocker et manipuler différents types de données, offrant ainsi une plus grande flexibilité.
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 }
Les génériques nous permettent également d'écrire des algorithmes à usage général tels que des opérations de tri, de recherche ou de réduction. Ces algorithmes peuvent gérer différents types de données, garantissant la réutilisabilité et la maintenabilité du code.
func Sort[T any](slice []T) []T { sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] }) return slice }
Considérons une structure Client
contenant différents types de données : 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 }
SortCustomers
, pour trier les clients en fonction de n'importe quel champ : sortedByID := SortCustomers(customers, customers[0].ID) sortedByName := SortCustomers(customers, customers[0].Name)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!