Go 泛型:Map Key 的型別限制
在Go1.18 中,定義一個可以用作Map Key 的泛型鍊錶失敗並出現錯誤「Cons[int] 未實現可比較」。這是因為對映射鍵實現類似介面的嚴格要求,確保它們支援相等檢查(== 和 !=)而不會出現恐慌。
Go 1.20 更新
在 Go 1.20 中,可比約束現在被認為是映射鍵的正確包羅萬象。根據 Go 規範被認為可比較的類型,即使比較可能會出現恐慌,也將滿足約束。這解決了根據規範可比較的類型與嚴格可比較的類型之間的不一致問題。
Go 1.18 和1.19 注意事項
在Go 1.18 和1.19 中,可比較約束只能透過支援== 和!=實例的嚴格可比較類型來比較類型來化,而不會出現恐慌。這排除了接口。儘管支援相等運算符,但介面並未實現可比較,因為它們的動態類型和值進行了比較。這意味著提供的 Cons 結構體(包含 List[X] 類型的欄位)無法實現可比較。
替代約束
要解決此限制,嵌入可比較的自訂約束可以透過映射鍵結構來定義和實現,而不是使用介面欄位。例如:
總之,可比較約束現在是 Go 1.20 中建議的映射鍵類型約束。在 Go 1.18 和 1.19 中,由於其無限的類型集,介面無法使用相當的實例化。嵌入可比較的自訂約束可以用作替代方案。
以上是Go 的映射鍵類型限制在 1.18、1.19 和 1.20 版本中如何演變?的詳細內容。更多資訊請關注PHP中文網其他相關文章!