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
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.
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")
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
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!