Go1.21新增cmp包的用法詳解
cmp.Compare 函數(shù)
定義如下:
func Compare[T Ordered](x, y T) int
返回值有以下幾種情況:
- 如果 x 小于 y,返回-1
- 如果 x 等于 y,返回 0
- 如果 x 大于 y,返回 1
對于浮點類型,NaN 被認為小于任何非 NaN 的值, NaN 被認為等于 NaN, -0.0 被認為等于 0.0。簡單示例如下:
package main import ( "cmp" "fmt" "math" ) func main() { fmt.Println(cmp.Compare(1, 2)) // -1 fmt.Println(cmp.Compare(1, 1)) // 0 fmt.Println(cmp.Compare(2, 1)) // 1 fmt.Println(cmp.Compare(1, math.NaN())) // 1 fmt.Println(cmp.Compare(-1, math.NaN())) // 1 fmt.Println(cmp.Compare(math.NaN(), math.NaN())) // 0 fmt.Println(cmp.Compare(-0.0, 0.0)) // 0 }
cmp.Less 函數(shù)
定義如下:
func Less[T Ordered](x, y T) bool
判斷 x 是否小于 y。對于浮點類型,NaN 被認為小于任何非 NaN 的值,并且 -0.0 不小于(等于) 0.0。
package main import ( "cmp" "fmt" "math" ) func main() { fmt.Println(cmp.Less(1, 2)) //true fmt.Println(cmp.Less(1, 1)) // false fmt.Println(cmp.Less(2, 1)) // false fmt.Println(cmp.Less(1, math.NaN())) // false fmt.Println(cmp.Less(-1, math.NaN())) // false fmt.Println(cmp.Less(math.NaN(), math.NaN())) // false fmt.Println(cmp.Less(math.NaN(), -1.0)) // true fmt.Println(cmp.Less(-0.0, 0.0)) // false }
cmp.Ordered 接口
定義如下:
type Ordered interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
~float32 | ~float64 |
~string
}
Ordered 是對有序類型的約束,包含任何支持操作符 <、<=、>= 和 > 的類型。如果 Go 未來的版本添加了新的有序類型,則將修改此接口以將新的有序類型包含進去。
需要注意的是,浮點類型可能包含NaN(“非數(shù)字”)類型的值。在將 NaN 值與任何其它值(無論是否為 NaN)進行比較時,例如 == 或 < 之類的操作符結果都是 false。
到此這篇關于Go1.21新增cmp包的用法詳解的文章就介紹到這了,更多相關Go1.21 cmp包內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang通過context控制并發(fā)的應用場景實現(xiàn)
這篇文章主要介紹了golang通過context控制并發(fā)的應用場景實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01golang數(shù)據(jù)結構之golang稀疏數(shù)組sparsearray詳解
這篇文章主要介紹了golang數(shù)據(jù)結構之golang稀疏數(shù)組sparsearray的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09