Fonctions génériques pour les données numériques dans Go
Lors de la création d'une calculatrice dans Go, gérer la différence entre les entiers et les flottants peut être un défi. Il existe plusieurs façons d'aborder ce problème, notamment :
Convertir tout en flottants
Cette approche implique de convertir toutes les entrées en flottants, car les flottants ont une plage plus large que les entiers. Cependant, cela peut entraîner des problèmes de précision pour les grands entiers.
Créer des fonctions distinctes pour chaque type
Vous pouvez également créer des fonctions distinctes pour chaque type, telles que addInt et ajoutezFloat. Bien qu'il s'agisse d'une approche sans ambiguïté, elle peut conduire à une duplication de code et à des passe-partout.
Utilisation de génériques (Go 1.18 et versions ultérieures)
Avec l'introduction de génériques dans Go 1.18 , une solution plus élégante devient disponible. Vous pouvez définir une fonction générique avec un paramètre de type restreint aux types numériques :
func add[T Number](a, b T) T { return a + b }
La contrainte Number peut être définie à l'aide du package golang.org/x/exp/constraints :
import ( "golang.org/x/exp/constraints" ) type Number interface { constraints.Integer | constraints.Float }
Avec cette fonction générique, vous pouvez effectuer des additions avec n'importe quel type numérique (entiers, flottants et même complexes) nombres) :
fmt.Println(add(1, 2)) // 3 (int + int) fmt.Println(add(1.5, 3.2)) // 4.7 (float64 + float64)
Limitations
Bien que les fonctions génériques offrent de la flexibilité, gardez à l'esprit les limitations suivantes :
En tirant parti des génériques, vous pouvez écrire du code concis et réutilisable qui gère les données numériques de manière transparente dans vos programmes Go.
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!