Maison >développement back-end >Golang >Comment puis-je accéder aux méthodes partagées dans les contraintes syndicales de Go Generics ?
Accès aux méthodes partagées dans les contraintes d'union avec les génériques Go
Dans les génériques Go (v1.18), les contraintes d'union de type permettent de définir des interfaces qui acceptent valeurs de plusieurs types. Cependant, la question se pose de savoir comment accéder aux méthodes partagées entre ces types.
Considérons l'exemple suivant :
type A struct {} type B struct {} type AB interface { *A | *B } func (a *A) some() bool {...} func (b *B) some() bool {...} func some[T AB](x T) bool { return x.some() // error }
Dans ce code, alors que A et B partagent la méthode some, le une erreur se produit lorsque vous essayez d'y accéder à partir de certains [T AB]. En effet, le compilateur ne reconnaît que les méthodes explicitement déclarées dans l'interface de contrainte.
Pour résoudre ce problème, on peut ajouter la méthode partagée à la contrainte d'interface, comme indiqué ci-dessous :
type AB interface { *A | *B some() bool } func some[T AB](x T) bool { return x.some() // Works }
Cette approche restreint T aux types de A ou B qui implémentent la méthode some.
Cependant, cette solution est une solution de contournement pour une limitation dans Go 1.18. génériques. La spécification du langage suggère que cela devrait être possible, mais le compilateur ne le prend pas en charge. Cette limitation a été reconnue dans les notes de version de Go 1.18 et est documentée dans le numéro 51183. L'espoir est que cette restriction soit supprimée dans Go 1.19.
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!