Maison > développement back-end > Golang > Pourquoi ne puis-je pas attribuer « Props[Example] » à « Props[Generic] » dans Go Generics ?

Pourquoi ne puis-je pas attribuer « Props[Example] » à « Props[Generic] » dans Go Generics ?

Susan Sarandon
Libérer: 2024-12-20 09:15:11
original
439 Les gens l'ont consulté

Why Can't I Assign `Props[Example]` to `Props[Generic]` in Go Generics?

Restrictions génériques d'attribution de type

Considérez le code suivant :

type Generic interface {
    ID() string
}

type Props[G Generic] struct{}

type Example struct {
    id string
}

func (example Example) ID() string {
    return example.id
}

var ExampleProps = Props[Example]{}

func Problem() Props[Generic] {
    return ExampleProps
}
Copier après la connexion

Ce code ne parvient pas à se compiler avec l'erreur :

cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement
Copier après la connexion

Pourquoi est-ce se produit ?

Go Generics crée des types nommés entièrement nouveaux lorsqu'ils sont instanciés avec différents arguments de type. Dans ce cas, Props[Example] et Props[Generic] sont des types nommés distincts, même si l'exemple implémente Generic.

Flexibilité grâce au paramétrage des types

Pour résoudre ce problème et maintenir la flexibilité, on peut instancier Props avec un paramètre de type :

func Problem[T Generic](v T) Props[T] {
    return Props[T]{Value: v}
}
Copier après la connexion

Cette approche permet à la fonction de renvoyer Props[T] pour un type générique T spécifique qui implémente Generic.

Résumé

Dans les génériques Go, l'instanciation d'un type générique avec différents arguments de type entraîne des types nommés distincts . Par conséquent, tenter d’attribuer un type à un autre, même si leurs arguments de type satisfont à des conditions spécifiques, n’est pas autorisé. L'utilisation du paramétrage de type offre une solution pour maintenir la flexibilité dans de tels scénarios.

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