簡介
在Go 泛型時,開發者可能會遇到困難當嘗試使用諸如 >之類的訂單運算子時在接受滿足可比較約束的類型的函數內。本文深入探討了這種不相容性背後的原理,並探討了潛在的解決方案。
可比較約束
Go 語言規範中定義的可比較約束適用於以下類型:支援相等運算子(== 和 !=)。這包括可用作映射鍵的類型,包括具有可比較欄位的陣列和結構體。
排序運算子
雖然 Go 語言規範使用術語「比較運算子」為了包含相等和排序運算符,規範明確區分了它們適用的類型。具體來說,排序運算子如>且
與 Comparable 不相容
不幸的是,可比較約束並不意味著類型支援排序運算子。從遇到的錯誤訊息可以明顯看出:「無效操作:無法比較t1 > t2(運算符> 未在T 上定義)。」
解決方案
Go 1.21 以上
Go 版本1.21及更高版本,開發人員可以利用標準庫引入的 cmp.Ordered 類型約束。此約束及其關聯函數 Less 和 Compare 有助於有序類型的比較。
Go 1.18 到1.20
對於1.18 和1.20 之間的Go 版本,約束.golang.org/x/exp 套件中的有序約束可用於涉及排序的比較運營商。
以上是為什麼 Go 泛型的「可比較」約束不能與排序運算子一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!