首頁 >後端開發 >Golang >如何解決Go在實作泛型介面時出現「cannot infer V」錯誤?

如何解決Go在實作泛型介面時出現「cannot infer V」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-12-06 06:24:13543瀏覽

How Can I Resolve Go's

推斷通用介面實現的型別參數:「無法推斷V」難題

問題

嘗試使用以下方式儲存並載入不同類型的結果時通用介面及其實現,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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn