Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas utiliser de méthodes sur un pointeur vers un paramètre de type dans Go Generics ?

Pourquoi ne puis-je pas utiliser de méthodes sur un pointeur vers un paramètre de type dans Go Generics ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 21:54:01781parcourir

Why Can't I Use Methods on a Pointer to a Type Parameter in Go Generics?

Génériques dans Go : exploration des paramètres et des contraintes de type

Comprendre les paramètres et les contraintes de type

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.

Le problème du pointeur vers le 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.

Résoudre le problème avec les contraintes

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) {}

Implémentation des contraintes

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!

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