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 ?

Comment les génériques de Go peuvent-ils gérer des tranches de différents types numériques ?

DDD
DDDoriginal
2024-12-25 02:12:16387parcourir

How Can Generics in Go Handle Slices of Different Numeric Types?

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!

Déclaration:
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