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)行比較時(shí),例如 == 或 < 之類的操作符結(jié)果都是 false。
到此這篇關(guān)于Go1.21新增cmp包的用法詳解的文章就介紹到這了,更多相關(guān)Go1.21 cmp包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang多個(gè)域名的跨域資源共享的實(shí)現(xiàn)
本文主要介紹了Golang多個(gè)域名的跨域資源共享的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
golang中g(shù)in框架接入jwt使用token驗(yàn)證身份
本文主要介紹了golang中g(shù)in框架接入jwt使用token驗(yàn)證身份,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
一文教你如何快速學(xué)會Go的struct數(shù)據(jù)類型
結(jié)構(gòu)是表示字段集合的用戶定義類型。它可以用于將數(shù)據(jù)分組為單個(gè)單元而不是將每個(gè)數(shù)據(jù)作為單獨(dú)的值的地方。本文就來和大家聊聊Go中struct數(shù)據(jù)類型的使用,需要的可以參考一下2023-03-03
初探Golang數(shù)據(jù)結(jié)構(gòu)之Slice的使用
在學(xué)習(xí)Go語言時(shí),一直對數(shù)組和切片的使用場景好奇,不明白為什么推薦使用切片來代替數(shù)組,所以本文就來和大家梳理一下Slice切片的相關(guān)知識吧2023-09-09
Go語言進(jìn)行多時(shí)區(qū)時(shí)間轉(zhuǎn)換的示例代碼
本文介紹了使用Go語言進(jìn)行多時(shí)區(qū)時(shí)間轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
go內(nèi)存緩存如何new一個(gè)bigcache對象示例詳解
這篇文章主要為大家介紹了go內(nèi)存緩存如何new一個(gè)bigcache對象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09

