Maison >développement back-end >Golang >Comment les génériques de Go peuvent-ils gérer des tranches de différents types numériques ?
Utilisation de génériques avec des tranches de différents types dans Go
La prise en compte des génériques dans Go implique le concept de types de base pour les interfaces. Une contrainte d'interface, telle que NumberSlice, n'a pas de type principal car elle englobe plusieurs types sous-jacents (par exemple, []int64 et []float64). Cela constitue un obstacle lorsque l'on tente de parcourir des tranches au sein d'une fonction générique.
Pour résoudre ce problème, une approche consiste à modifier l'interface pour imposer les types de base, en laissant le type de tranche être déterminé dans la signature de la fonction. :
type Number interface { int64 | float64 } func add[N Number](n []N) { for _, v := range n { fmt.Println(v) } }
Cependant, une solution encore plus complète mais verbeuse implique de déclarer explicitement le type de noyau dans l'interface contrainte :
type NumberSlice[N int64 | float64] interface { ~[]N } func add[S NumberSlice[N], N int64 | float64](n S) { for _, v := range n { fmt.Println(v) } }
Cette approche garantit que l'interface a un type sous-jacent spécifique ([]N) et que la fonction peut accepter et traiter des tranches de int64 ou float64.
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!