首頁 > 後端開發 > Golang > 為什麼 Go 泛型的「可比較」約束不能與排序運算子一起使用?

為什麼 Go 泛型的「可比較」約束不能與排序運算子一起使用?

Patricia Arquette
發布: 2024-12-12 13:02:11
原創
560 人瀏覽過

Why Can't Go Generics' `comparable` Constraint Be Used with Ordering Operators?

Go 中的泛型:與可比較約束不相容的排序運算子

簡介

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板