Go1.18新特性對泛型支持詳解
1、泛型是什麼
Go1.18增加瞭對泛型的支持,泛型是一種獨立於使用的特定類型編寫代碼的方式。現在可以編寫函數和類型適用於一組類型集合的任何一種。泛型生命周期隻在編譯期,旨在開發中減少重復代碼的編寫。
由於go屬於靜態強類型語言,例如在比較兩個數的大小時,沒有泛型的時候,僅僅隻是傳入類型不一樣,我們就要再復制一份一樣的函數,如果有瞭泛型就可以減少這類代碼。
//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後引入泛型後,隻需要再函數後用中括號聲明T可能出現的類型,中間用符號|分隔。
//使用泛型 func GetMaxNumber [T int | int32 ](a, b T) T { if a > b { return a } return b }
2、泛型類型的定義
2.1、聲明一個自定義類型
跟聲明接口一樣,使用 type x interface{}關鍵字來聲明,不過裡面的成員方法不再是方法,而是類型,類型之間用符號|隔開。
成員類型支持go中所有的基本類型。
type MyT interface { int | int8 | int16 | int32 | int64 | []int | map[int]int | struct{} }
2.2、內置的泛型類型any和comparable
any
:表示go裡面所有的內置基本類型,等價於interface{},其實就是interface{}的別名。
//這裡的any並非泛型的約束,而是類型 func test(x any) any { return x }
comparable
: 表示go裡面所有的內置的可比較類型。
2.3、泛型中的~符號是什麼
符號~都是與類型一起出現的,用來表示支持該類型的衍生類型
//int的衍生類型 type intA int type intB = int //不僅支持int,還支持int的衍生類型intA和intB type Myint interface { ~int | float }
以上就是Go1.18新特性對泛型支持詳解的詳細內容,更多關於Go1.18新特性支持泛型的資料請關註WalkonNet其它相關文章!