嘗試使用以下方式儲存並載入不同類型的結果時通用介面及其實現,Go 遇到了推斷 V的問題type:
cannot infer V: infer type parameter from constraint implementation
在 Go 1.20 及更早版本中,從泛型限制 ConfigStorage[K, V] 的實現推斷類型 V 並不簡單。類型推斷演算法從實現約束的具體類型推導出類型參數的能力受到限制。
Go 1.21 以上版本:
自轉到1.21,這個問題已經解決。類型推斷現在考慮介面方法中使用的類型。因此,您可以簡單地呼叫GetValue 而不指定型別限制:
result, _ = GetValue(fileStorage, "key")
Go 1.20 及以下:
在舊版的Go 中,您必須顯式指定類型GetValue的參數:
GetValue[string, string](fileStorage, "key") // First string for K, second for V
Go 發行說明強調,類型推論現在在為介面賦值時會考慮方法。這允許從匹配的方法參數類型推斷出方法簽名中類型參數的類型參數。
在 Go 1.21 之前,建議使用函數參數型別推論來從非型別參數推斷出型別參數。然而,約束類型推斷最初並不支援從已知類型參數推導出未知類型參數。當從實現約束的類型推斷 V 時,此限制導致「無法推斷 V」錯誤。
以上是如何解決Go在實作泛型介面時出現「cannot infer V」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!