Generics in Go permet la réutilisabilité du code, permettant la création de code pouvant être utilisé avec différents types de données. Par rapport aux génériques de Java et C++, les génériques de Go ont une surcharge de performances inférieure, mais l'inférence de type n'est que conditionnelle et a des contraintes limitées.
Les génériques sont une fonctionnalité du langage de programmation qui permet la création de code qui fonctionne avec différents types de données. Go 1.18 introduit les génériques, apportant d'énormes changements à son écosystème. Cet article comparera les similitudes et les différences entre les génériques de Go et d’autres fonctionnalités du langage, et fournira des exemples pratiques.
Fonctionnalités | Go | Java | C++ |
---|---|---|---|
Syntaxe |
func name[T any] (t T) func name[T any](t T)
|
class Box<t></t> |
template<typename t></typename> |
nullabilité | oui | non | |
Inférence de type | conditionnelle | oui | |
contraintes | limitée | illimitée | |
surcharge de performance | inférieure | inférieur |
Exemple pratique : Tri des fonctions génériques L'exemple suivant montre comment utiliser des fonctions génériques pour trier des tableaux de différents types :
type Ordered interface { Less(a, b Ordered) bool } func Sort[T Ordered](arr []T) { for i := 0; i < len(arr)-1; i++ { for j := i + 1; j < len(arr); j++ { if arr[i].Less(arr[j]) { arr[i], arr[j] = arr[j], arr[i] } } } } type Int struct{ i int } func (a Int) Less(b Int) bool { return a.i < b.i } type String struct{ s string } func (a String) Less(b String) bool { return a.s < b.s } func main() { arr1 := []Int{{1}, {3}, {2}} arr2 := []String{"a", "c", "b"} Sort(arr1) Sort(arr2) fmt.Println(arr1) // [{1} {2} {3}] fmt.Println(arr2) // [{a} {b} {c}] }
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!