Go1.18新特性對(duì)泛型支持詳解
1、泛型是什么
Go1.18增加了對(duì)泛型的支持,泛型是一種獨(dú)立于使用的特定類(lèi)型編寫(xiě)代碼的方式?,F(xiàn)在可以編寫(xiě)函數(shù)和類(lèi)型適用于一組類(lèi)型集合的任何一種。泛型生命周期只在編譯期,旨在開(kāi)發(fā)中減少重復(fù)代碼的編寫(xiě)。
由于go屬于靜態(tài)強(qiáng)類(lèi)型語(yǔ)言,例如在比較兩個(gè)數(shù)的大小時(shí),沒(méi)有泛型的時(shí)候,僅僅只是傳入類(lèi)型不一樣,我們就要再?gòu)?fù)制一份一樣的函數(shù),如果有了泛型就可以減少這類(lèi)代碼。
//int
func GetMaxNumber(a, b int) int {
if a > b {
return a
}
return b
}
//int32
func GetMaxNumber(a, b int32) int32 {
if a > b {
return a
}
return b
}
go1.18后引入泛型后,只需要再函數(shù)后用中括號(hào)聲明T可能出現(xiàn)的類(lèi)型,中間用符號(hào)|分隔。
//使用泛型
func GetMaxNumber [T int | int32 ](a, b T) T {
if a > b {
return a
}
return b
}
2、泛型類(lèi)型的定義
2.1、聲明一個(gè)自定義類(lèi)型
跟聲明接口一樣,使用 type x interface{}關(guān)鍵字來(lái)聲明,不過(guò)里面的成員方法不再是方法,而是類(lèi)型,類(lèi)型之間用符號(hào)|隔開(kāi)。
成員類(lèi)型支持go中所有的基本類(lèi)型。
type MyT interface {
int | int8 | int16 | int32 | int64 | []int | map[int]int | struct{}
}
2.2、內(nèi)置的泛型類(lèi)型any和comparable
any:表示go里面所有的內(nèi)置基本類(lèi)型,等價(jià)于interface{},其實(shí)就是interface{}的別名。

//這里的any并非泛型的約束,而是類(lèi)型
func test(x any) any {
return x
}
comparable: 表示go里面所有的內(nèi)置的可比較類(lèi)型。

2.3、泛型中的~符號(hào)是什么
符號(hào)~都是與類(lèi)型一起出現(xiàn)的,用來(lái)表示支持該類(lèi)型的衍生類(lèi)型
//int的衍生類(lèi)型
type intA int
type intB = int
//不僅支持int,還支持int的衍生類(lèi)型intA和intB
type Myint interface {
~int | float
}以上就是Go1.18新特性對(duì)泛型支持詳解的詳細(xì)內(nèi)容,更多關(guān)于Go1.18新特性支持泛型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
linux下通過(guò)go語(yǔ)言獲得系統(tǒng)進(jìn)程cpu使用情況的方法
這篇文章主要介紹了linux下通過(guò)go語(yǔ)言獲得系統(tǒng)進(jìn)程cpu使用情況的方法,實(shí)例分析了Go語(yǔ)言使用linux的系統(tǒng)命令ps來(lái)分析cpu使用情況的技巧,需要的朋友可以參考下2015-03-03
在go文件服務(wù)器加入http.StripPrefix的用途介紹
這篇文章主要介紹了在go文件服務(wù)器加入http.StripPrefix的用途介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Go處理json數(shù)據(jù)方法詳解(Marshal,UnMarshal)
這篇文章主要介紹了Go處理json數(shù)據(jù)的方法詳解,Marshal(),UnMarshal(),需要的朋友可以參考下2022-04-04
Go 數(shù)據(jù)庫(kù)查詢(xún)與結(jié)構(gòu)體映射的示例詳解
本文主要介紹了如何使用Go語(yǔ)言進(jìn)行數(shù)據(jù)庫(kù)查詢(xún)并將查詢(xún)結(jié)果映射到結(jié)構(gòu)體中,文章詳細(xì)講解了結(jié)構(gòu)體字段導(dǎo)出和db標(biāo)簽的使用方法,并通過(guò)示例代碼展示了如何正確地進(jìn)行數(shù)據(jù)庫(kù)查詢(xún)和結(jié)果映射2024-11-11
golang語(yǔ)言中for循環(huán)語(yǔ)句用法實(shí)例
這篇文章主要介紹了golang語(yǔ)言中for循環(huán)語(yǔ)句用法,實(shí)例分析了for循環(huán)遍歷的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01

