Maison > développement back-end > Golang > Comment puis-je utiliser des méthodes partagées avec des contraintes de type d'union dans Go Generics ?

Comment puis-je utiliser des méthodes partagées avec des contraintes de type d'union dans Go Generics ?

Barbara Streisand
Libérer: 2024-12-23 12:30:09
original
182 Les gens l'ont consulté

How Can I Use Shared Methods with Union Type Constraints in Go Generics?

Contraintes génériques dans Go : utilisation de méthodes partagées pour les types d'union

Dans les génériques Go (v1.18), une contrainte d'union de type vous permet pour définir un ensemble de types pouvant être affectés à un paramètre de type générique. Cependant, l'utilisation d'une méthode partagée pour ces types peut entraîner des erreurs.

Considérez le code suivant :

type A struct {}
type B struct {}

type AB interface {
    *A | *B
}

func (a *A) some() bool {
    return true
}

func (b *B) some() bool {
    return false
}

func some[T AB](x T) bool {
    return x.some()   // <- error
}
Copier après la connexion

L'erreur se produit car le compilateur ne trouve pas la méthode some sur le type d'union AB. . Pour résoudre ce problème, vous devez ajouter la méthode à la contrainte d'interface :

type AB interface {
    *A | *B
    some() bool
}

func some[T AB](x T) bool {
    return x.some()   // works
}
Copier après la connexion

Cela restreint le type générique T aux types qui implémentent à la fois *A et *B, et définit également la méthode some.

Cependant, comme indiqué dans les notes de version de Go 1.18, il s'agit d'une limitation temporaire. Go 1.19 devrait supprimer cette restriction, permettant au compilateur de déduire automatiquement la méthode some à partir du type union.

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