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 ?

Pourquoi Go Generics génère-t-il des erreurs « item.SetId undefined » et comment puis-je les corriger ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-05 01:54:02854parcourir

Why Does Go Generics Throw

Utilisez des génériques : comprendre les considérations relatives au type de pointeur

L'énigme des erreurs

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.

Résoudre le problème des paramètres de type

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>

Fixation des contraintes d'implémentation

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>

Conclusion

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!

Déclaration:
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