Maison  >  Article  >  développement back-end  >  Comment les génériques Golang affectent-ils les fonctions des conteneurs et les opérations de collecte ?

Comment les génériques Golang affectent-ils les fonctions des conteneurs et les opérations de collecte ?

WBOY
WBOYoriginal
2024-04-16 14:24:01496parcourir

Les génériques dans Go 1.18 améliorent les fonctions de conteneur et les opérations de collecte : les génériques de fonctions de conteneur permettent aux fonctions d'opérer sur différents types de données de manière commune, comme la fonction map qui mappe des éléments de tranche arbitraires à une nouvelle tranche. Les génériques d'opérations d'ensemble simplifient les opérations telles que l'intersection, l'union et la différence, et permettent d'utiliser la même fonction sur différents types de données, comme la fonction Intersection pour trouver l'intersection de deux ensembles quelconques. Les avantages des génériques incluent la réutilisation du code, l'évolutivité et la sécurité, vous permettant d'écrire des fonctions communes qui fonctionnent sur différents types de données, d'ajouter facilement la prise en charge de nouveaux types de données ou fonctions et d'éviter les erreurs de type pour garantir la robustesse de votre code.

Comment les génériques Golang affectent-ils les fonctions des conteneurs et les opérations de collecte ?

L'impact des génériques Golang sur les fonctions des conteneurs et les opérations de collecte

Les fonctionnalités génériques introduites dans la version Go 1.18 ont apporté des améliorations significatives aux fonctions des conteneurs Golang et aux opérations de collecte, améliorant la réutilisabilité et la fiabilité du code. .

Fonctions de conteneur

Les génériques permettent aux fonctions de conteneur (telles que map, filter, reduce, etc.) de fonctionner de manière généralisée sans Spécifiez explicitement les paramètres de type. Cela nous permet d'écrire des fonctions qui fonctionnent de manière transparente sur une variété de types de données. mapfilterreduce 等)以一般化的方式工作,而无需显式指定类型参数。这使我们可以编写可以在各种数据类型上无缝操作的函数。

例如,以下是用泛型编写的 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 函数,可以求出两个任意集合的交集:

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
}

实战案例:搜索引擎

考虑一个搜索引擎示例,我们需要在包含文档的切片中搜索特定查询。使用泛型,我们可以编写一个 Search 函数,可以根据文档类型(如 TextDocumentHtmlDocument

Par exemple, ce qui suit est une fonction map écrite en génériques qui peut mapper des éléments de n'importe quelle tranche vers une nouvelle tranche :

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
}

Opérations de collection

Les génériques simplifient également considérablement les opérations de collection, telles que la recherche intersection, union et différence. Nous pouvons utiliser le même ensemble de fonctions pour gérer différents types de données sans écrire d'implémentations spécialisées.
  • Par exemple, voici la fonction Intersection écrite en génériques, qui permet de trouver l'intersection de deux ensembles arbitraires : rrreeeCas pratique : moteur de recherche
  • Considérons un exemple de moteur de recherche, nous avons besoin Rechercher une tranche contenant des documents pour une requête spécifique. En utilisant des génériques, nous pouvons écrire une fonction Search qui peut gérer différents types de documents en fonction du type de document (comme TextDocument, HtmlDocument) : rrreee Avantages
  • Les avantages de l'introduction de génériques dans Go incluent :
Réutilisabilité du code :

La possibilité d'écrire des fonctions génériques pouvant fonctionner sur différents types de données.

🎜🎜Extensibilité : 🎜Il est facile d'ajouter la prise en charge de nouveaux types de données ou de nouvelles fonctions. 🎜🎜🎜Sécurité : 🎜Les génériques aident à prévenir les erreurs de type et à garantir la robustesse et la fiabilité de votre code. 🎜🎜🎜En adoptant les génériques, les développeurs Golang peuvent désormais écrire un code de manipulation de conteneurs et de collections plus élégant, concis et plus sûr. 🎜

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!

Déclaration:
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