Cet article explore les subtilités de la raison pour laquelle l'erreur du compilateur "type *T est un pointeur vers un paramètre de type, pas un type paramètre" se produit lors de la tentative de compilation de code impliquant des génériques dans Go.
Dans les génériques Go, un paramètre de type représente un espace réservé pour tout type qui satisfait à la contrainte spécifiée. Notamment, la contrainte définit l'ensemble des opérations disponibles sur le paramètre de type, mais elle ne définit pas directement les propriétés d'un type de pointeur dérivé de ce paramètre de type. C'est le nœud du message d'erreur rencontré.
Le message d'erreur signifie que l'ensemble de méthodes de *T n'inclut pas automatiquement les méthodes de récepteur de pointeur déclarées sur le type concret en cours. contraint. Cela signifie que si l'interface de contrainte nécessite une méthode de récepteur de pointeur, le type concret doit l'implémenter avec un récepteur de pointeur.
Dans l'extrait de code fourni :
<code class="go">type GS interface { Id() string (*GS) SetId(string) }</code>
<code class="go">var storeA = &MyStore[*A]{}</code>
<code class="go">type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) {...}</code>
En effectuant ces ajustements, le code devient syntaxiquement et sémantiquement correct.
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!