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 }
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
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} }
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!