Heim > Backend-Entwicklung > Golang > Wie kann in Go Generic Interfaces die Meldung „V: Typparameter kann nicht aus der Einschränkungsimplementierung abgeleitet werden' behoben werden?

Wie kann in Go Generic Interfaces die Meldung „V: Typparameter kann nicht aus der Einschränkungsimplementierung abgeleitet werden' behoben werden?

Barbara Streisand
Freigeben: 2024-12-10 01:49:08
Original
493 Leute haben es durchsucht

How to Resolve

Fehlerbehebung: „V: Typparameter kann nicht aus der Einschränkungsimplementierung abgeleitet werden“ in generischen Go-Schnittstellen

In Go kann die Definition einer generischen Schnittstelle mit Typparametern dazu führen Rückschlussprobleme bei der Implementierung und Verwendung. In diesem Artikel wird der Fehler „V kann nicht abgeleitet werden: Typparameter aus Einschränkungsimplementierung ableiten“ in solchen Szenarios behoben.

Problembeschreibung

Betrachten Sie eine Schnittstelle ConfigStorage mit den Typparametern K und V, wobei V WritableType erweitert . Eine Dateisystemspeicherimplementierung dieser Schnittstelle, FileSystemStorage, ist definiert. Beim Versuch, die generische Funktion GetValue zu verwenden, tritt jedoch ein Kompilierungsfehler auf, da der Typ von V nicht abgeleitet werden kann.

Lösung

Go 1.21 und höher:

Das Problem wurde in Go 1.21 und höher behoben, da die Typinferenz erweitert wurde, um Methodensignaturen in Schnittstellen zu berücksichtigen. Typargumente für Typparameter in Methodensignaturen können aus übereinstimmenden Parametern in den entsprechenden Methoden abgeleitet werden.

So verwenden Sie GetValue ohne Angabe von Typeinschränkungen:

result, _ = GetValue(fileStorage, "key")
Nach dem Login kopieren

Go 1.20 und niedriger:

Für frühere Go-Versionen wird die Schlussfolgerung von V aus dem Typ, der die Einschränkung implementiert, nicht unterstützt. Beim Aufruf von GetValue müssen explizite Typparameter angegeben werden:

GetValue[string, string](fileStorage, "key")
Nach dem Login kopieren

Erläuterung

Der Fehler tritt auf, weil die Funktion GetValue versucht, den Typ von V aus den bereitgestellten Argumenten abzuleiten: ihrem ersten Argument, dem Speicher und sein zweites Argument, key. Diese Argumente allein liefern jedoch keine ausreichenden Informationen zur Bestimmung von V, da Speicher ein Schnittstellenwert ist, der mehrere Typen implementieren kann.

Durch die explizite Angabe der Typparameter wird die Mehrdeutigkeit für den Compiler beseitigt. Dadurch kann der Typinferenzalgorithmus anhand der bereitgestellten Argumente den richtigen Typ von V ableiten.

Das obige ist der detaillierte Inhalt vonWie kann in Go Generic Interfaces die Meldung „V: Typparameter kann nicht aus der Einschränkungsimplementierung abgeleitet werden' behoben werden?. 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