Maison >développement back-end >Golang >Comment puis-je parcourir une union de tranches dans une fonction générique Go sans type de noyau ?
Itérer sur une union de tranches dans une fonction générique sans type de base
Dans Go 1.18, les fonctions génériques nous permettent de travailler avec des types dynamiquement. Cependant, rencontrer des difficultés lors de l'itération sur une tranche composée de différents types nécessite des considérations supplémentaires.
Lorsque nous traitons de contraintes de type, nous devons comprendre le concept de type de base. Un type de base existe lorsqu'un seul type sous-jacent existe pour tous les types dans une interface ou lorsque tous les canaux ont le même type d'élément et la même direction.
Dans l'exemple de code initial :
type NumberSlice interface { []int64 | []float64 }
Le la contrainte d'interface NumberSlice n'a pas de type principal car elle comprend plusieurs types sous-jacents : []int64 et []float64. Cela signifie que nous ne pouvons pas parcourir les tranches de cette interface.
Pour surmonter cet obstacle, nous pouvons modifier l'interface pour exiger les types de base à la place :
type Number interface { int64 | float64 } func add[N Number](n []N) { for _, v := range n { fmt.Println(v) } }
Cela nous permet de déclarer des tranches de int64 ou float64 et parcourez-les dans la fonction générique.
Alternativement, nous pouvons définir une interface plus explicite avec un noyau type :
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 connu de []N pour tous les types implémentant NumberSlice[N].
En effectuant ces ajustements, nous pouvons réussir à parcourir unions de tranches au sein de fonctions génériques, offrant une flexibilité accrue dans notre code.
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!