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

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

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

