首頁 >後端開發 >Golang >如何解決Go通用介面中的「無法推斷V:從約束實現推斷類型參數」?

如何解決Go通用介面中的「無法推斷V:從約束實現推斷類型參數」?

Barbara Streisand
Barbara Streisand原創
2024-12-10 01:49:08494瀏覽

How to Resolve

Go 泛型介面中的錯誤解決:「無法推斷V:從約束實現推斷類型參數」

在Go 中,使用類型參數定義泛型介面可能會導致實施和使用時的推理問題。本文解決了這種情況下的錯誤「無法推斷 V:從約束實現推斷類型參數」。

問題描述

考慮一個帶有類型參數 K 和 V 的介面 ConfigStorage,其中 V 擴展了 WritableType 。定義了此介面的檔案系統儲存實作 FileSystemStorage。然而,當嘗試使用泛型函數 GetValue 時,由於無法推斷 V 的類型,會出現編譯錯誤。

Go 1.21 及更高版本:

此問題在Go 1.21 及更高版本中已解決,因為類型推論已推斷得到增強,可以考慮介面中的方法簽名。方法簽章中類型參數的型別參數可以從對應方法中的匹配參數推斷出來。

要在不指定類型約束的情況下使用GetValue:

轉到1.20 及更低版本:

對於早期的Go 版本,不支援從實作約束的類型推斷V。呼叫GetValue 時必須提供明確類型參數:

說明

出現錯誤是因為函數GetValue 嘗試從提供的參數推斷V 的類型:其第一個參數,存儲,及其第二個參數key。然而,這些參數本身並不能提供足夠的資訊來確定 V,因為儲存是一個可以實現多種類型的介面值。

明確指定型別參數可以消除編譯器的歧義。它允許類型推斷演算法根據提供的參數推斷出 V 的正確類型。

以上是如何解決Go通用介面中的「無法推斷V:從約束實現推斷類型參數」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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