Maison > développement back-end > Golang > le corps du texte

Comment les génériques Golang résolvent-ils les erreurs liées au type dans les fonctions ?

WBOY
Libérer: 2024-04-16 17:33:01
original
638 Les gens l'ont consulté

Les génériques résolvent les bogues liés au type dans les fonctions Go, permettant la création de fonctions à usage général qui acceptent et fonctionnent sur différents types de données. En utilisant des variables de type, les fonctions génériques peuvent s'adapter à n'importe quel type qui leur est transmis, évitant ainsi les erreurs de conflit de types et simplifiant et augmentant la flexibilité de votre code.

Comment les génériques Golang résolvent-ils les erreurs liées au type dans les fonctions ?

Les génériques Go sont utilisés pour résoudre les erreurs liées au type dans les fonctions

Introduits dans Go 1.18, les génériques sont une fonctionnalité puissante qui améliore la réutilisabilité et la flexibilité du code. Les génériques vous permettent de créer des fonctions à usage général pouvant fonctionner sur différents types de données. Cela élimine l’écriture de code en double et les erreurs liées au type.

Erreurs liées au type

En l'absence de génériques, si une fonction attend un type spécifique et que les paramètres qui lui sont transmis ont des types différents, des erreurs liées au type se produisent. Par exemple :

func AddInts(a, b int) int {
    return a + b
}

func main() {
    fmt.Println(AddInts(1, 2.5)) // 编译错误:不合法的类型参数
}
Copier après la connexion

Le code ci-dessus provoquera une erreur de compilation car la fonction AddInts attend deux paramètres entiers, mais 2.5 est un nombre à virgule flottante. AddInts 函数期望两个整数参数,但 2.5 是一个浮点数。

泛型解决方案

使用泛型,您可以创建接受任何类型的通用函数。通用函数使用类型变量,可以适应传递给它的任何类型。让我们重写 AddInts 函数使用泛型:

func Add[T numeric](a, b T) T {
    return a + b
}
Copier après la connexion

此函数使用类型变量 T,该变量限制为 numeric 类型(包括数字类型,如整数、浮点数和复数)。由于 T 是一个通用类型,您可以传递任何实现了 numeric 接口的类型:

fmt.Println(AddInts(1, 2)) // 3
fmt.Println(AddInts(1.5, 2.5)) // 4.0
Copier après la connexion

实战案例

泛型的一个常见用例是创建比较函数,这些函数可以比较不同类型的值。例如,以下函数使用泛型比较两个值的相等性:

func Equal[T comparable](a, b T) bool {
    return a == b
}
Copier après la connexion

现在,您可以使用 Equal

Solution générique

En utilisant des génériques, vous pouvez créer des fonctions universelles qui acceptent n'importe quel type. Une fonction générique utilise des variables de type qui peuvent s'adapter à n'importe quel type qui lui est transmis. Réécrivons la fonction AddInts pour utiliser des génériques :

fmt.Println(Equal(1, 2)) // false
fmt.Println(Equal("hello", "world")) // false
Copier après la connexion
Cette fonction utilise une variable de type T qui est restreinte aux types numériques (y compris les types numériques , tels que les entiers, les flottants et les nombres complexes). Puisque T est un type générique, vous pouvez transmettre n'importe quel type qui implémente l'interface numérique : 🎜rrreee🎜🎜Un exemple pratique🎜🎜🎜Un cas d'utilisation courant des génériques est de créer des comparaisons Fonctions qui comparent des valeurs de différents types. Par exemple, la fonction suivante utilise des génériques pour comparer deux valeurs d'égalité : 🎜rrreee🎜 Vous pouvez maintenant utiliser la fonction Equal pour comparer deux valeurs de tout type comparable : 🎜rrreee🎜🎜Conclusion 🎜🎜🎜 Generics in Go est un outil puissant pour résoudre les erreurs liées au type dans les fonctions, rendant votre code plus réutilisable et flexible. En utilisant des génériques, vous pouvez créer des fonctions à usage général pouvant fonctionner sur différents types de données, simplifiant ainsi votre code et évitant les erreurs liées au type. 🎜

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!

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