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 ?

Comment puis-je parcourir une union de tranches dans une fonction générique Go sans type de noyau ?

Mary-Kate Olsen
Libérer: 2024-12-23 15:23:10
original
658 Les gens l'ont consulté

How Can I Iterate Over a Union of Slices in a Go Generic Function Without a Core Type?

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
}
Copier après la connexion

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)
    }
}
Copier après la connexion

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)
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal