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
Patricia Arquetteoriginal
2024-12-14 13:04:12369parcourir

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
}

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)
}

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
}

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!

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