Maison > développement back-end > Golang > Comment les méthodes partagées peuvent-elles être utilisées avec les contraintes d'union de type de Go Generics ?

Comment les méthodes partagées peuvent-elles être utilisées avec les contraintes d'union de type de Go Generics ?

Linda Hamilton
Libérer: 2024-12-20 15:38:14
original
666 Les gens l'ont consulté

How Can Shared Methods Be Used with Go Generics' Type Union Constraints?

Go Generics : débloquer des méthodes partagées dans les unions de types

Dans la nouvelle fonctionnalité générique de Go, la contrainte d'union de types permet de lier plusieurs types à un seul paramètre de type générique. Cependant, la question se pose : comment utiliser les méthodes partagées entre ces types ?

Tentative initiale et erreur du compilateur

<br>interface de type AB { </p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B
Copier après la connexion

}

func (a *A) some() booléen {

return true
Copier après la connexion

}

func (b *B) some() bool {

return false
Copier après la connexion

}

func some[T AB] (x T) booléen {

return x.some()   // undefined
Copier après la connexion

}

Le code ci-dessus tente d'utiliser la méthode shared some dans la fonction some, mais rencontre une erreur, car le compilateur ne peut pas déterminer lequel une méthode à appeler.

Solution de contournement utilisant la contrainte d'interface

Pour surmonter ce problème limitation, la méthode partagée peut être ajoutée directement à la contrainte d'interface :

<br>type AB interface {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">*A | *B
some() bool
Copier après la connexion

}

func some[ T AB](x T) booléen {

return x.some()   // works
Copier après la connexion

}

Cela garantit que le type générique T doit satisfaire la contrainte d'interface, qui inclut la méthode some.

Limitation dans Go 1.18

Il est important de noter que cette solution de contournement est temporaire mesure due à une restriction dans Go 1.18. Les spécifications Go autorisent l'utilisation de méthodes partagées dans les unions de types, mais l'implémentation actuelle du compilateur la limite aux méthodes explicitement déclarées dans l'interface de contrainte.

Résolution dans Go 1.19

Les notes de version de Go 1.18 reconnaissent cette limitation et expriment leur intention de la supprimer dans Go 1.19, permettant un accès direct aux méthodes partagées dans les unions de types. Cette amélioration renforcera l'expressivité et la flexibilité des génériques Go.

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
Article précédent:Go's Intégration vs héritage : composition ou complexité ? Article suivant:Comment tester efficacement les services gRPC en Go à l'aide de Bufconn ?
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
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal