Warum gibt Go bei der Verwendung von Generics den Fehler „Typ *T ist Zeiger auf Typparameter, nicht Typparameter' aus?

Susan Sarandon
Freigeben: 2024-11-04 16:46:02
Original
176 Leute haben es durchsucht

Why Does Go Throw the Error

Entscheiden Sie sich für Generics: Typparameter und -einschränkungen verstehen

Dieser Artikel befasst sich mit den Feinheiten, warum der Compilerfehler „Typ *T ist ein Zeiger auf einen Typparameter und nicht auf einen Typ“ auftritt Parameter“ tritt auf, wenn versucht wird, Code mit Generika in Go zu kompilieren.

Über Typparameter und Einschränkungen

In Go-Generika stellt ein Typparameter einen Platzhalter für jeden Typ dar, der die angegebene Einschränkung erfüllt. Insbesondere definiert die Einschränkung den Satz von Operationen, die für den Typparameter verfügbar sind, sie definiert jedoch nicht direkt die Eigenschaften eines Zeigertyps, der von diesem Typparameter abgeleitet wird. Dies ist der Kern der aufgetretenen Fehlermeldung.

Erläuterung der Fehlermeldung

Die Fehlermeldung bedeutet, dass der Methodensatz von *T nicht automatisch Zeigerempfängermethoden enthält, die für den konkreten Typtyp deklariert sind eingeschränkt. Das heißt, wenn die Einschränkungsschnittstelle eine Zeigerempfängermethode erfordert, muss der konkrete Typ diese mit einem Zeigerempfänger implementieren.

Lösung des Problems

Im bereitgestellten Codeausschnitt:

  1. Einschränkungen: Um den Fehler „SetId-Methode hat Zeigerempfänger“ zu beheben, sollte die Schnittstelle GS mit definiert werden ein Zeigerempfänger:
<code class="go">type GS interface {
    Id() string
    (*GS) SetId(string)
}</code>
Nach dem Login kopieren
  1. Instantiierung: Die MyStore-Instanziierung sollte *A anstelle von A verwenden:
<code class="go">var storeA = &MyStore[*A]{}</code>
Nach dem Login kopieren
  1. Methodenänderungen:Ändern Sie die Methodendefinitionen in MyStore, um T anstelle von zu verwenden *T:
<code class="go">type MyStore[T GS] struct {
    values map[string]T
}

func (s *MyStore[T]) add(item T) {...}</code>
Nach dem Login kopieren

Durch diese Anpassungen wird der Code syntaktisch und semantisch korrekt.

Das obige ist der detaillierte Inhalt vonWarum gibt Go bei der Verwendung von Generics den Fehler „Typ *T ist Zeiger auf Typparameter, nicht Typparameter' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!