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

