Dans le modèle de programmation générique de Go, les paramètres de type représentent des types d'espace réservé qui peut être instancié avec des types concrets. Cependant, les paramètres de type n’impliquent aucune propriété ou ensemble de méthodes spécifiques pour leurs types de pointeur (*T). Les contraintes, quant à elles, définissent les exigences auxquelles les types concrets doivent répondre pour implémenter un paramètre de type.
L'erreur "type T est un pointeur vers "paramètre de type, pas paramètre de type" se produit lorsque vous essayez d'utiliser des méthodes définies sur le pointeur d'un type concret (T) dans le cadre de l'ensemble de méthodes du paramètre de type. En effet, le paramètre type et son type de pointeur sont des entités distinctes.
Pour résoudre ce problème, vous pouvez déclarer explicitement des contraintes qui nécessitent des types concrets pour implémenter des méthodes sur les deux le type et son pointeur :
func Foo[T any, PT interface { SetId(string); *T}](v T) {}
Lors de l'implémentation des contraintes, assurez-vous que les méthodes sont déclarées de manière appropriée. Dans le cas de l'interface GS avec une méthode SetId déclarée sur T, vous devez instancier MyStore avec A et modifier le type du champ dans MyStore pour qu'il corresponde au type concret :
var storeA = &MyStore[*A]{} type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) {}
En affinant les contraintes et en implémentant les méthodes en conséquence, vous pouvez utiliser efficacement les génériques dans votre code 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!