Maison >développement back-end >Golang >Comment puis-je définir une contrainte de type récursive dans les génériques Go 2 ?

Comment puis-je définir une contrainte de type récursive dans les génériques Go 2 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-27 01:35:10305parcourir

How Can I Define a Recursive Type Constraint in Go 2 Generics?

Comment définir une contrainte de type récursive à l'aide d'une interface personnalisée

Dans les génériques Go2, vous pouvez utiliser une interface pour contraindre un type générique, en vous assurant qu'il implémente une méthode spécifique . Cependant, imposer l'implémentation d'une méthode avec un argument de type générique n'était pas autorisé dans la version actuelle.

Présentation d'une solution :

La nouvelle version permet de définir l'interface Lesser et IsLess fonctionner comme :

type Lesser[T any] interface {
    Less(T) bool
}

func IsLess[T Lesser[T]](x, y T) bool {
    return x.Less(y)
}

Cette solution impose que T doit être d'un type qui implémente l'interface Lesser, ce qui nécessite une méthode Less prenant un argument de tapez T. En définissant la contrainte T Lesser[T], nous créons une contrainte de type récursive.

Exemple pratique :

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
}

Dans cet exemple, les types personnalisés Apple et Orange remplissent tous deux l'exigence Lesser et peut être transmise à IsLess. Cependant, transmettre un int ou mélanger des types (par exemple, Apple et Orange) entraînera des erreurs de compilation dues à des contraintes de type.

Conclusion :

Cette solution permet des contraintes de type récursives à l'aide d'une interface définie. dans la nouvelle version des génériques Go2, vous permettant d'appliquer des relations complexes entre les types génériques et leurs méthodes.

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