Go1.21新增cmp包的用法詳解
cmp.Compare 函數(shù)
定義如下:
func Compare[T Ordered](x, y T) int
返回值有以下幾種情況:
- 如果 x 小于 y,返回-1
- 如果 x 等于 y,返回 0
- 如果 x 大于 y,返回 1
對(duì)于浮點(diǎn)類型,NaN 被認(rèn)為小于任何非 NaN 的值, NaN 被認(rèn)為等于 NaN, -0.0 被認(rèn)為等于 0.0。簡(jiǎn)單示例如下:
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。對(duì)于浮點(diǎn)類型,NaN 被認(rèn)為小于任何非 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 是對(duì)有序類型的約束,包含任何支持操作符 <、<=、>= 和 > 的類型。如果 Go 未來(lái)的版本添加了新的有序類型,則將修改此接口以將新的有序類型包含進(jìn)去。
需要注意的是,浮點(diǎn)類型可能包含NaN(“非數(shù)字”)類型的值。在將 NaN 值與任何其它值(無(wú)論是否為 NaN)進(jìn)行比較時(shí),例如 == 或 < 之類的操作符結(jié)果都是 false。
到此這篇關(guān)于Go1.21新增cmp包的用法詳解的文章就介紹到這了,更多相關(guān)Go1.21 cmp包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang通過context控制并發(fā)的應(yīng)用場(chǎng)景實(shí)現(xiàn)
這篇文章主要介紹了golang通過context控制并發(fā)的應(yīng)用場(chǎng)景實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01golang數(shù)據(jù)結(jié)構(gòu)之golang稀疏數(shù)組sparsearray詳解
這篇文章主要介紹了golang數(shù)據(jù)結(jié)構(gòu)之golang稀疏數(shù)組sparsearray的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09如何理解Go函數(shù)是一等公民原理及使用場(chǎng)景
這篇文章主要為大家介紹了如何理解Go函數(shù)是一等公民及使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Go語(yǔ)言基本類型轉(zhuǎn)換的實(shí)現(xiàn)示例
本文詳細(xì)介紹了Go語(yǔ)言中的基本類型轉(zhuǎn)換方法,包括字符串與基本類型之間的轉(zhuǎn)換、浮點(diǎn)數(shù)與字符串之間的轉(zhuǎn)換、布爾型與字符串之間的轉(zhuǎn)換,以及基本類型之間的強(qiáng)制轉(zhuǎn)換以及格式化輸出,感興趣的可以了解一下2024-11-11Go 實(shí)現(xiàn)基于Token 的登錄流程深度分析
Token 認(rèn)證機(jī)制的核心思想是,服務(wù)端在用戶登錄時(shí)生成一個(gè) Token,客戶端在后續(xù)的請(qǐng)求中攜帶這個(gè) Token,服務(wù)端通過驗(yàn)證 Token 的有效性來(lái)確認(rèn)用戶的身份,本文將帶你深入探索基于 Token 的登錄流程,這是一種更為靈活且適用于現(xiàn)代應(yīng)用架構(gòu)的認(rèn)證方式2024-03-03Go語(yǔ)言中Timer計(jì)時(shí)器的使用技巧詳解
Go語(yǔ)言中的time包里有個(gè)Timer計(jì)時(shí)器的功能,這篇文章主要就是來(lái)和大家介紹一下Timer計(jì)時(shí)器的使用技巧,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07Go語(yǔ)言處理超大字符串型整數(shù)加減經(jīng)典面試詳解
這篇文章主要為大家介紹了Go語(yǔ)言處理超大字符串型整數(shù)加減經(jīng)典面試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10GoLand編譯帶有構(gòu)建標(biāo)簽的程序思路詳解
這篇文章主要介紹了GoLand編譯帶有構(gòu)建標(biāo)簽的程序,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11