Maison > développement back-end > Golang > Comment puis-je définir des contraintes de type récursives dans les génériques Go2 à l'aide d'interfaces ?

Comment puis-je définir des contraintes de type récursives dans les génériques Go2 à l'aide d'interfaces ?

Patricia Arquette
Libérer: 2024-12-14 13:04:12
original
366 Les gens l'ont consulté

How Can I Define Recursive Type Constraints in Go2 Generics Using Interfaces?

Définition d'une contrainte de type récursive à l'aide d'une interface prédéfinie

Dans les génériques Go2, les interfaces peuvent être utilisées pour spécifier des contraintes de type sur les types génériques. Cependant, le projet actuel ne fournit pas de moyen de forcer l'implémentation d'une méthode avec un argument de type générique lui-même.

Pour surmonter cette limitation, considérons l'approche suivante :

Définir une interface récursive :

type Lesser[T any] interface {
    Less(T) bool
}
Copier après la connexion

Définir une fonction avec un paramètre de type générique contraint par le récursif Interface :

func IsLess[T Lesser[T]](x, y T) bool {
    return x.Less(y)
}
Copier après la connexion

Utilisation :

type Apple int

func (a Apple) Less(other Apple) bool {
    return a < other
}

type Orange int

func (o Orange) Less(other Orange) bool {
    return o < other
}

func main() {
    fmt.Println(IsLess(Apple(10), Apple(20)))   // true
    fmt.Println(IsLess(Orange(30), Orange(15))) // false
}
Copier après la connexion

Explication :

La contrainte de type T Lesser [T] garantit que le type générique T doit implémenter la méthode Less avec un argument de type T. Cela permet un type récursif contraintes.

Cette approche vous permet de définir des types personnalisés comme Apple et Orange qui implémentent leurs propres méthodes Less, remplissant la contrainte récursive et permettant l'utilisation de la fonction IsLess avec ces types personnalisés.

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