Maison > développement back-end > Golang > le corps du texte

Pourquoi Go renvoie-t-il l'erreur « le type *T est un pointeur vers un paramètre de type, pas un paramètre de type » lors de l'utilisation de génériques ?

Susan Sarandon
Libérer: 2024-11-04 16:46:02
original
176 Les gens l'ont consulté

Why Does Go Throw the Error

Utilisez les génériques : comprendre les paramètres et les contraintes de type

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.

À propos des paramètres et des contraintes de type

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 expliqué

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.

Résoudre le problème

Dans l'extrait de code fourni :

  1. Contraintes : Pour résoudre l'erreur "La méthode SetId a un récepteur de pointeur", l'interface GS doit être définie avec un récepteur de pointeur :
<code class="go">type GS interface {
    Id() string
    (*GS) SetId(string)
}</code>
Copier après la connexion
  1. Instanciation : L'instanciation MyStore doit utiliser *A au lieu de A :
<code class="go">var storeA = &MyStore[*A]{}</code>
Copier après la connexion
  1. Modifications de méthode : Modifiez les définitions de méthode dans MyStore en utilisez T au lieu de *T :
<code class="go">type MyStore[T GS] struct {
    values map[string]T
}

func (s *MyStore[T]) add(item T) {...}</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!