無法推斷V:從約束實現解析推斷類型參數
目標是在Go 中創建一個支援保存和加載結果的介面在不同的資料庫中,同時支援各種資料類型。
type WritableType interface { ~int | ~string | ~float64 } type ConfigStorage[K, V WritableType] interface { get(key K) (V, error) set(key K, value V) (bool, error) }
實作檔案時出現問題系統儲存:
type FileSystemStorage[K, V WritableType] struct { } func (f FileSystemStorage[K, V]) get(key K) (V, error) { // Code to load data from JSON file } func (f FileSystemStorage[K, V]) set(key K, value V) (bool, error) { // Code to save data as JSON file }
呼叫SetValue時,成功。但是,在呼叫GetValue 時,編譯器會遇到錯誤:
cannot infer V
解
對於Go 1.21 以上版本:
在Go 1.21中,類型推斷得到了改進,可以考慮介面方法中使用的類型。因此,您現在可以在不指定類型參數的情況下呼叫GetValue:
result, _ = GetValue(fileStorage, "key")
對於Go 1.20 及以下版本:
由於當前類型推斷演算法不允許推斷V 從約束實作中,呼叫GetValue 時必須提供明確型別參數:
GetValue[string, string](fileStorage, "key")
以上是如何解決 Go 在通用介面中使用類型約束時出現'Cannot Infer V”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!