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.
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. .
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. 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
函数,可以求出两个任意集合的交集:
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
函数,可以根据文档类型(如 TextDocument
、HtmlDocument
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 }
Intersection
écrite en génériques, qui permet de trouver l'intersection de deux ensembles arbitraires : rrreeeCas pratique : moteur de rechercheSearch
qui peut gérer différents types de documents en fonction du type de document (comme TextDocument
, HtmlDocument
) : rrreee AvantagesLa 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!