Écrire des fonctions génériques pour les types numériques dans Go
Dans Go, lorsque vous travaillez avec différents types numériques comme int et float64, il est nécessaire de créer fonctions spécifiques au type ou convertir des valeurs en un type commun. Une approche plus élégante consiste à écrire des fonctions génériques à l'aide de paramètres de type et de contraintes d'interface.
Utilisation des paramètres de type et de la contrainte numérique
Dans Go 1.18 et supérieur, vous pouvez définir une fonction générique avec un paramètre de type T et contrainte T à l'interface Number, définie comme suit :
import "golang.org/x/exp/constraints" type Number interface { constraints.Integer | constraints.Float }
Cette contrainte inclut tous types entiers signés et non signés, ainsi que types flottants. Votre fonction générique peut s'écrire comme :
func add[T Number](a, b T) T { return a + b }
Appel de fonctions génériques
Avec cette fonction générique, vous pouvez désormais effectuer des opérations arithmétiques sur deux arguments quelconques de type numérique . Par exemple :
a := 1 b := 2.5 fmt.Println(add(a, b)) // 3.5
Limitations
Notez que les arguments de la fonction générique doivent avoir le même type. De plus, les opérations pouvant être effectuées dans la fonction sont limitées à celles prises en charge par tous les types dans la contrainte Nombre (c'est-à-dire, -, * et /).
Gestion des nombres complexes
Go prend également en charge les types complexes (complex64 et complex128). Si vous souhaitez les inclure dans votre fonction générique, vous pouvez étendre la contrainte Nombre pour inclure des contraintes. Complexe :
type Number interface { constraints.Integer | constraints.Float | constraints.Complex }
N'oubliez pas que les opérateurs arithmétiques dans Go sont également pris en charge par les types complexes, à l'exception du % opérateur et opérateurs au niveau du bit, qui ne sont pris en charge que par les types entiers.
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!