Maison > développement back-end > Golang > Scénarios d'application spécifiques des génériques dans Golang

Scénarios d'application spécifiques des génériques dans Golang

WBOY
Libérer: 2024-05-04 11:45:02
original
695 Les gens l'ont consulté

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.

Scénarios dapplication spécifiques des génériques dans Golang

Scénarios d'application spécifiques des génériques dans Go

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.

1. Opérations d'ensemble

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
}
Copier après la connexion

2. Structures de données

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
}
Copier après la connexion

3. Algorithmes

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
}
Copier après la connexion

Cas pratique : Type de tri personnalisé

Considérons une structure Client contenant différents types de données : Customer 结构:

type Customer struct {
    ID    int
    Name  string
    Age   int
    Score float64
}
Copier après la connexion

我们可以使用泛型编写一个通用的 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
}
Copier après la connexion

On peut utiliser des génériques pour écrire une fonction générale SortCustomers, pour trier les clients en fonction de n'importe quel champ :

sortedByID := SortCustomers(customers, customers[0].ID)
sortedByName := SortCustomers(customers, customers[0].Name)
Copier après la connexion
Cette fonction peut trier en fonction de l'identifiant du client, de son nom, de son âge ou de son score, comme indiqué ci-dessous : 🎜rrreee

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal