問題:
當使用泛型定義的鍊錶作為Go 1.18中的map key,出現錯誤訊息,提示該鍊錶沒有實作可比較的介面。是否有適合此目的的較弱替代約束?
答案:
Go 1.20(2023 年2 月)
The可比較約束是映射鍵的適當的約束是映射鍵的適當的約束包羅萬象的約束。在 Go 1.20 中,解決了規範可比較和可比較類型之間的不一致問題,使您的程式碼能夠成功編譯。
Go 1.18 和1.19
Go 中的可比較約束1.18 和1.19 專為嚴格可比較的類型而設計,支援== 和!= 而不會出現運行時恐慌。這不包括接口,即使是那些支援相等運算符的接口。由於介面具有無限類型集,因此它們無法實例化為可比較的。
要解決此問題,請考慮使用嵌入可比較的自訂約束,例如:
type List interface { comparable isList() bool }
結構上實現此約束將允許連結清單用作地圖鍵。
以上是1.20 之前的版本中,Go 泛型對 Map Key 的「comparable」約束是否可以減弱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!