Heim > Backend-Entwicklung > Golang > Wie kann ich den Go-Fehler „V kann nicht abgeleitet werden' bei der Implementierung generischer Schnittstellen beheben?

Wie kann ich den Go-Fehler „V kann nicht abgeleitet werden' bei der Implementierung generischer Schnittstellen beheben?

Barbara Streisand
Freigeben: 2024-12-06 06:24:13
Original
542 Leute haben es durchsucht

How Can I Resolve Go's

Typparameter für generische Schnittstellenimplementierungen ableiten: Rätsel „V kann nicht abgeleitet werden“

Problem

Beim Versuch, Ergebnisse unterschiedlicher Typen mit zu speichern und zu laden Als generische Schnittstelle und deren Implementierung stößt Go auf ein Problem beim Ableiten der V Typ:

cannot infer V: infer type parameter from constraint implementation
Nach dem Login kopieren

Erklärung

In Go 1.20 und früher ist es nicht einfach, den Typ V aus der Implementierung der generischen Einschränkung ConfigStorage[K, V] abzuleiten. Der Typinferenzalgorithmus ist in seiner Fähigkeit, Typargumente aus konkreten Typen abzuleiten, die Einschränkungen implementieren, begrenzt.

Lösung

Go 1.21 und höher:

Seitdem Go 1.21, dieses Problem ist behoben. Die Typinferenz berücksichtigt jetzt Typen, die in Schnittstellenmethoden verwendet werden. Daher können Sie GetValue einfach aufrufen, ohne Typbeschränkungen anzugeben:

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

Go 1.20 und niedriger:

In älteren Versionen von Go müssen Sie den Typ explizit angeben Parameter für GetValue:

GetValue[string, string](fileStorage, "key") // First string for K, second for V
Nach dem Login kopieren

Zusätzliche Informationen

Die Go-Versionshinweise Heben Sie hervor, dass die Typinferenz jetzt Methoden berücksichtigt, wenn einer Schnittstelle Werte zugewiesen werden. Dadurch können Typargumente für Typparameter in Methodensignaturen aus übereinstimmenden Parametertypen von Methoden abgeleitet werden.

Vor Go 1.21 wurde in Vorschlägen vorgeschlagen, die Typinferenz von Funktionsargumenten zu verwenden, um Typargumente aus Nicht-Typ-Argumenten abzuleiten. Allerdings wurde die Einschränkungstypinferenz zunächst nicht unterstützt, um unbekannte Typargumente aus bekannten abzuleiten. Diese Einschränkung führte zum Fehler „V kann nicht abgeleitet werden“, wenn V aus dem Typ abgeleitet wurde, der die Einschränkung implementierte.

Das obige ist der detaillierte Inhalt vonWie kann ich den Go-Fehler „V kann nicht abgeleitet werden' bei der Implementierung generischer Schnittstellen beheben?. 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