Lors de l'écriture de programmes Go, vous pouvez rencontrer le besoin de créer des fonctions pouvant accepter n'importe quel type numérique, que ce soit c'est un entier ou un float. Cela peut être difficile car Go différencie strictement ces types.
Une approche consiste à convertir tous les arguments numériques en float64 puisque ce type couvre la plage des nombres entiers. Cependant, cela n'est pas toujours souhaitable, car cela peut introduire une perte de précision ou des erreurs lors du traitement de grands entiers.
Une autre option consiste à créer des fonctions distinctes pour chaque nombre numérique. type, tel que addInt pour les entiers et addFloat pour les flottants. Bien que cela garantisse la sécurité des types, cela peut entraîner des problèmes de duplication de code et de maintenance.
Avec l'introduction des paramètres de type dans Go 1.18, un plus une solution élégante est maintenant disponible. Vous pouvez définir des fonctions génériques qui prennent n'importe quel type T et utiliser des contraintes d'interface pour restreindre T aux types numériques.
Par exemple :
func add[T Number](a, b T) T { return a + b } type Number interface { constraints.Integer | constraints.Float }
Cette fonction peut être utilisée avec n'importe quel type numérique, y compris int, int64, float32 et float64. La contrainte Number garantit que seuls les types numériques sont autorisés.
Gardez à l'esprit que les fonctions génériques nécessitent des arguments du même type. Par exemple, la fonction add nécessite que les deux arguments soient du même type numérique. De plus, les fonctions génériques ne prennent pas en charge tous les opérateurs, en particulier ceux spécifiques à certains types (par exemple, les opérateurs au niveau du bit pour les entiers).
L'utilisation de paramètres de type et de contraintes d'interface vous permet d'écrire des fonctions génériques. qui peut accepter n’importe quel type numérique. Cette approche assure la sécurité des types tout en évitant la duplication de code et en offrant une plus grande flexibilité.
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!