欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go?1.21新內(nèi)置函數(shù)min、max和clear的用法詳解

 更新時(shí)間:2023年08月09日 10:20:14   作者:陳明勇  
Go?1.21?版本已經(jīng)正式發(fā)布,它帶來(lái)了許多新特性和改進(jìn),其中引入了的三個(gè)新內(nèi)置函數(shù):max、min?和?clear,接下來(lái)我們就來(lái)看看這些函數(shù)的用途和特點(diǎn)吧

前言

Go 1.21 版本已經(jīng)正式發(fā)布,它帶來(lái)了許多新特性和改進(jìn)。其中引入了的三個(gè)新內(nèi)置函數(shù):max、minclear,接下來(lái)的內(nèi)容將詳細(xì)介紹這些函數(shù)的用途和特點(diǎn)。

準(zhǔn)備好了嗎?準(zhǔn)備一杯你最喜歡的咖啡或茶,隨著本文一探究竟吧。

max 函數(shù)

func max[T cmp.Ordered](x T, y ...T) T

這是一個(gè)泛型函數(shù),用于從一組值中尋找并返回 最大值,該函數(shù)至少要傳遞一個(gè)參數(shù)。在上述函數(shù)簽名中,T 表示類(lèi)型參數(shù),它必須滿(mǎn)足 cmp.Ordered 接口中定義的數(shù)據(jù)類(lèi)型要求,該接口的定義如下所示:

type Ordered interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64 |
		~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
		~float32 | ~float64 |
		~string
}

使用示例

了解了 max 函數(shù)的定義后,讓我們一起來(lái)學(xué)習(xí)如何使用它。

package main
import "fmt"
func main() {
	var a1, a2, a3 int64 = 1, 2, 3
	maxA := max(a1, a2, a3)
	fmt.Printf("%T, %d\n", maxA, maxA) // int64, 3
	var f1, f2, f3 float64 = 1.0, 2.0, 3.0
	maxF := max(f1, f2, f3)
	fmt.Printf("%T, %.1f\n", maxF, maxF) // float64, 3.0
	// 
	var s1, s2, s3 string = "aaa", "aab", "aac"
	maxS := max(s1, s2, s3)
	fmt.Println(maxS) // aac
}

在上述示例中,使用了 max 函數(shù)分別對(duì) int64、float64string 類(lèi)型的一組值進(jìn)行比較并獲取最大值,值得注意的地方是 string 類(lèi)型的比較原理,它是 基于字節(jié)的字典順序?qū)ψ址M(jìn)行比較。

min 函數(shù)

func min[T cmp.Ordered](x T, y ...T) T

該函數(shù)與 max 函數(shù)的功能相反,用于從一組值中尋找并返回 最小值,同樣傳遞進(jìn)來(lái)的值類(lèi)型也必須滿(mǎn)足 cmp.Ordered 接口中定義的數(shù)據(jù)類(lèi)型要求。

使用示例

package main
import "fmt"
func main() {
	var a1, a2, a3 int64 = 1, 2, 3
	maxA := min(a1, a2, a3)
	fmt.Printf("%T, %d\n", maxA, maxA) // int64, 1
	var f1, f2, f3 float64 = 1.0, 2.0, 3.0
	maxF := min(f1, f2, f3)
	fmt.Printf("%T, %.1f\n", maxF, maxF) // float64, 1.0
	// 按照字節(jié)逐個(gè)比較字符串的內(nèi)容
	var s1, s2, s3 string = "aaa", "aab", "aac"
	maxS := min(s1, s2, s3)
	fmt.Printf("%T, %s\n", maxS, maxS) // string, aaa
}

在上述示例中,使用了 min 函數(shù)分別對(duì) int64float64string 類(lèi)型的一組值進(jìn)行比較并獲取最小值,string 類(lèi)型的比較原理與 max 函數(shù)的比較原理相同。

clear 函數(shù)

func clear[T ~[]Type | ~map[Type]Type1](t T)

該函數(shù)接收一個(gè)參數(shù) t,用于清空變量 t (類(lèi)型為 slicemap) 中的元素。

  • 如果傳遞的是切片類(lèi)型變量,則會(huì)將切片的所有元素賦值為該切片類(lèi)型的零值;
  • 如果傳遞的是 map 類(lèi)型變量,則會(huì)清空 map 類(lèi)型變量的元素;
  • 如果傳遞的是自定義泛型類(lèi)型(例如 type MySlice[T any] []T),則類(lèi)型集中所有類(lèi)型必須是 slicemap。

使用示例

package main
import "fmt"
type MySlice[T any] []T  
type MyMap[K comparable, V any] map[K]V
func main() {
	s := []int{1, 2, 3, 4}
	clear(s)
	fmt.Printf("len: %d, cap: %d, elems: %v\n", len(s), cap(s), s) // len: 4, cap: 4, elems: [0 0 0 0]
	m := map[string]int{"Apple": 1, "Banana": 2}
	clear(m)
	fmt.Printf("len: %d, elems: %v\n", len(m), m) // len: 0, elems: map[]
	// 自定義泛型切片類(lèi)型變量
	mySlice := MySlice[string]{"公眾號(hào):Go技術(shù)干貨", "陳明勇", "Gopher"}
	clear(mySlice)
	fmt.Printf("len: %d, cap: %d, elems: %v\n", len(mySlice), cap(mySlice), mySlice) // len: 3, cap: 3, elems: [  ]
	// 自定義泛型 map 類(lèi)型變量
	myMap := MyMap[string, int]{"Apple": 1, "Banana": 2}
	clear(myMap)
	fmt.Printf("len: %d, elems: %v\n", len(myMap), myMap) // len: 0, elems: map[]
}

在上述示例中,演示了如何通過(guò) clear 函數(shù)對(duì)切片或 map 變量進(jìn)行刪除或清空操作,clear 函數(shù)不僅能接收 slicemap 類(lèi)型的變量,還能接收我們所自定義的泛型類(lèi)型參數(shù),但是在使用時(shí)必須確保類(lèi)型參數(shù)集中所有類(lèi)型必須是 slicemap。

值得注意的是:使用 clear 函數(shù)清空切片元素時(shí),并不會(huì)真正的刪除其中的元素,而是會(huì)將所有元素都設(shè)置為對(duì)應(yīng)類(lèi)型的零值。這意味著切片仍然保留其原始長(zhǎng)度和容量,但元素的內(nèi)容被清空。

小結(jié)

本文詳細(xì)介紹了 Go 1.21.0 版本中新增的內(nèi)置函數(shù) maxmin、和 clear。通過(guò)使用這些函數(shù),我們無(wú)需再自行定義比較大小或清空切片以及 map 變量的函數(shù)。

遺憾的是,要徹底清空切片并將長(zhǎng)度和容量都置為 0,仍然需要另外封裝一個(gè)函數(shù)來(lái)實(shí)現(xiàn)。因?yàn)?clear 函數(shù)只是將切片的元素賦值為相應(yīng)類(lèi)型的零值,而未改變其長(zhǎng)度和容量。

到此這篇關(guān)于Go 1.21新內(nèi)置函數(shù)min、max和clear的用法詳解的文章就介紹到這了,更多相關(guān)Go內(nèi)置函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go語(yǔ)言題解LeetCode1299將每個(gè)元素替換為右側(cè)最大元素

    go語(yǔ)言題解LeetCode1299將每個(gè)元素替換為右側(cè)最大元素

    這篇文章主要為大家介紹了go語(yǔ)言L(fǎng)eetCode刷題1299將每個(gè)元素替換為右側(cè)最大元素示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 解決golang sync.Wait()不執(zhí)行的問(wèn)題

    解決golang sync.Wait()不執(zhí)行的問(wèn)題

    這篇文章主要介紹了解決golang sync.Wait()不執(zhí)行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn)

    GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn)

    這篇文章主要介紹了GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 在?Go?語(yǔ)言中使用?regexp?包處理正則表達(dá)式的操作

    在?Go?語(yǔ)言中使用?regexp?包處理正則表達(dá)式的操作

    正則表達(dá)式是處理字符串時(shí)一個(gè)非常強(qiáng)大的工具,而?Go?語(yǔ)言的?regexp?包提供了簡(jiǎn)單而強(qiáng)大的接口來(lái)使用正則表達(dá)式,本文將介紹如何在?Go?中使用?regexp?包來(lái)編譯和執(zhí)行正則表達(dá)式,以及如何從文本中匹配和提取信息,感興趣的朋友一起看看吧
    2023-12-12
  • go?variant底層原理深入解析

    go?variant底層原理深入解析

    這篇文章主要為大家介紹了go?variant底層原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Golang程序漏洞檢測(cè)器govulncheck的安裝和使用

    Golang程序漏洞檢測(cè)器govulncheck的安裝和使用

    govulncheck 是一個(gè)命令行工具,可以幫助 Golang 開(kāi)發(fā)者快速找到項(xiàng)目代碼和依賴(lài)的模塊中的安全漏洞,該工具可以分析源代碼和二進(jìn)制文件,識(shí)別代碼中對(duì)這些漏洞的任何直接或間接調(diào)用,本文就給大家介紹一下govulncheck安裝和使用,需要的朋友可以參考下
    2023-09-09
  • go日志庫(kù)logrus的安裝及快速使用

    go日志庫(kù)logrus的安裝及快速使用

    這篇文章主要為大家介紹了go日志庫(kù)logrus的安裝及快速使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang打包成帶圖標(biāo)的exe可執(zhí)行文件

    golang打包成帶圖標(biāo)的exe可執(zhí)行文件

    這篇文章主要給大家介紹了關(guān)于golang打包成帶圖標(biāo)的exe可執(zhí)行文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Go語(yǔ)言中未知異常捕獲的多種場(chǎng)景與實(shí)用技巧

    Go語(yǔ)言中未知異常捕獲的多種場(chǎng)景與實(shí)用技巧

    在Go語(yǔ)言編程中,異常處理是確保程序健壯性的關(guān)鍵環(huán)節(jié),與一些其他編程語(yǔ)言不同,Go沒(méi)有傳統(tǒng)的try - catch結(jié)構(gòu)化異常處理機(jī)制,本文將深入探討Go語(yǔ)言中未知異常捕獲的多種場(chǎng)景與實(shí)用技巧,需要的朋友可以參考下
    2024-11-11
  • golang程序進(jìn)度條實(shí)現(xiàn)示例詳解

    golang程序進(jìn)度條實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了golang程序?qū)崿F(xiàn)進(jìn)度條示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論