Heim > Artikel > Backend-Entwicklung > Warum gibt Go bei der Verwendung von Generics den Fehler „Typ *T ist Zeiger auf Typparameter, nicht Typparameter“ aus?
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.
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.
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.
Im bereitgestellten Codeausschnitt:
<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>
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!