Maison > Article > développement back-end > Pourquoi Go Generics génère-t-il des erreurs « item.SetId undefined » et comment puis-je les corriger ?
Lorsque vous travaillez avec des génériques dans Go, vous pouvez rencontrer l'erreur suivante :
item.SetId non défini (le type *T est un pointeur vers un paramètre de type, pas un paramètre de type)
Cette erreur se produit lors de la tentative d'implémentation d'un magasin d'objets à l'aide de génériques. Le problème vient du fait que le paramètre de type T n’est pas le pointeur vers lui-même, *T. Par conséquent, les méthodes de récepteur de pointeur définies sur le type concret T ne sont pas implicitement incluses dans l'ensemble de méthodes de *T.
Pour résoudre ce problème, vous devez spécifier explicitement le contrainte selon laquelle T doit être un type de pointeur qui implémente l'interface GS et possède un récepteur de pointeur pour la méthode SetId :
<code class="go">func Foo[T any, PT interface { SetId(string); *T}](v T) {}</code>
Une autre erreur que vous pouvez rencontrer est :
A n'implémente pas GS (la méthode SetId a un récepteur de pointeur)
Cette erreur indique que la méthode SetId est déclarée sur *A, pas sur A. Pour résoudre ce problème, instanciez MyStore avec *A au lieu de A et ajustez le type du champ struct et de la méthode en conséquence :
<code class="go">var storeA = &MyStore[*A]{} type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) { }</code>
Comprendre ces considérations sur les paramètres de type et les contraintes d'implémentation est crucial lorsque l'on travaille avec des génériques dans Go. En résolvant ces problèmes, vous pouvez utiliser efficacement les génériques pour implémenter du code réutilisable et maintenable.
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!