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其它相關文章!

推薦閱讀: