亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go語法入門泛型type?parameters簡稱T(類型形參)兩種場景使用

 更新時間:2023年09月06日 09:38:27   作者:海生  
這篇文章主要為大家介紹了go語法入門泛型type?parameters簡稱T(類型形參)兩種場景使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、介紹

go在1.18終于加上了泛型。那么在之前,我們都沒有用10幾年了,一直用。

加上泛型后,到底好處在哪里呢,解決了那些場景的痛點呢?

泛型主要在于歸納,泛型-代表可以多余一種類型。

作為入門的文章,主要介紹兩種泛型的使用場景

泛型允許在函數(shù)和類型的實現(xiàn)中使用某個類型集合中的任何一種類型。

目前 “類型形參” (type parameters),簡稱 T

  • 面向函數(shù),作為參數(shù)
  • 面向結(jié)構(gòu)體,作為結(jié)構(gòu)體里面字段的類型

1.1 面向函數(shù),作為參數(shù)

我們來看一下,在比較兩個數(shù)的大小時,沒有泛型的時候,僅僅只是傳入類型不一樣,我們就要再寫一份一模一樣的函數(shù)。

// maxInt64 獲取j,j中的最大值
func maxInt64(i, j int64) int64 {
    if i >= j {
        return i
    }
    return j
}
// maxInt32 獲取j,j中的最大值
func maxInt32(i, j int32) int32 {
    if i >= j {
        return i
    }
    return j
}

此時代碼的邏輯一樣,只是類型不一樣,我們可以使用“類型形參” (type parameters),簡稱 T 來代表int32或者int64。

類型形參type parameters簡稱T語法為:

[T int32 | int64]

這樣的語法,我們用 類型形參T來代表int32或者int64類型。

上面的

maxInt64(i, j int64) int64
maxInt32(i, j int32) int32

我們使用 類型形參T來替換為:

func maxInt32orInt62[T int32 | int64](i, j T) T {
    if i >= j {
        return i
    }
    return j
}
func TestMaxInt32orInt62(t *testing.T) {
    var i1, j1 int32 = 1, 3
    t.Log(maxInt32orInt62(i1, j1))
    var i2, j2 int64 = 11, 3
    t.Log(maxInt32orInt62(i2, j2))
}

輸出:

=== RUN   TestMaxInt32orInt62
    3
    11
--- PASS: TestMaxInt32orInt62 (0.00s)

在參數(shù)方面 i, j的類型變?yōu)?code>T,以及返回值的類型也是 T因為我么在前面定義了

[T int32 | int64]

用T來代表int32或者int64.

1.2 面向結(jié)構(gòu)體,作為結(jié)構(gòu)體里面字段的類型

我們先看一下正常結(jié)構(gòu)體的寫法如下:

type sumInt struct {
    Num int64
}
func (s sumInt) Sum() int64 {
    return s.Num
}
type sumFloat struct {
    Num float64
}
func (s sumFloat) Sum() float64 {
    return s.Num
}
func TestSumIntOrFloat(t *testing.T) {
    i := sumInt{Num: 100}
    t.Log(i.Sum())
    f := sumFloat{Num: 100.0}
    t.Log(f.Sum())
}

輸出:

=== RUN   TestSumIntOrFloat
    100
    100
--- PASS: TestSumIntOrFloat (0.00s)

我們發(fā)現(xiàn)Num的類型為int64float64,我們在這里準備用“類型形參” (type parameters),簡稱 T來代替他們。

[T int64 | float64]

修改為如下:

type sumIntOrFloat[T int64 | float64] struct {
    Num T
}
func (s sumIntOrFloat[T]) Sum() T {
    return s.Num
}
func TestSumIntOrFloat(t *testing.T) {
    i := sumIntOrFloat[int64]{Num: 100}
    t.Log(i.Sum())
    f := sumIntOrFloat[float64]{Num: 100.0}
    t.Log(f.Sum())
}

輸出:

=== RUN   TestSumIntOrFloat
    100
    100
--- PASS: TestSumIntOrFloat (0.00s)

以上就是go語法入門泛型type parameters簡稱T(類型形參)兩種場景使用的詳細內(nèi)容,更多關(guān)于go泛型type parameters的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go?分布式鎖簡單實現(xiàn)實例詳解

    go?分布式鎖簡單實現(xiàn)實例詳解

    這篇文章主要為大家介紹了go?分布式鎖簡單實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Go語言學(xué)習(xí)筆記之golang操作MongoDB數(shù)據(jù)庫

    Go語言學(xué)習(xí)筆記之golang操作MongoDB數(shù)據(jù)庫

    MongoDB是Nosql中常用的一種數(shù)據(jù)庫,這篇文章主要給大家介紹了關(guān)于Go語言學(xué)習(xí)筆記之golang操作MongoDB數(shù)據(jù)庫的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Golang中如何對MySQL進行操作詳解

    Golang中如何對MySQL進行操作詳解

    這篇文章主要給大家介紹了關(guān)于在Golang中如何對MySQL進行操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 利用rpm打包上線部署golang代碼的方法教程

    利用rpm打包上線部署golang代碼的方法教程

    RPM是RPM Package Manager(RPM軟件包管理器)的縮寫,這篇文章主要給大家介紹了關(guān)于利用rpm打包上線部署golang代碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Golang實現(xiàn)Md5校驗的代碼示例

    Golang實現(xiàn)Md5校驗的代碼示例

    最近項目中有個需求,就是地圖文件下發(fā)后,接收方需要文件的md5值,和接收到的文件做比對,以免文件不完整,引起bug,于是測試了下本地文件和遠程文件的md5計算,所以本文給大家介紹了Golang實現(xiàn)Md5校驗,需要的朋友可以參考下
    2024-07-07
  • Go實現(xiàn)基于RSA加密算法的接口鑒權(quán)

    Go實現(xiàn)基于RSA加密算法的接口鑒權(quán)

    這篇文章主要介紹了Go實現(xiàn)基于RSA加密算法的接口鑒權(quán),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Golang中類型轉(zhuǎn)換利器cast庫的用法詳解

    Golang中類型轉(zhuǎn)換利器cast庫的用法詳解

    cast庫是一個簡潔而強大的第三方庫,它的主要功能是實現(xiàn)類型之間的安全轉(zhuǎn)換,而在Golang開發(fā)中,類型轉(zhuǎn)換是一個常見且不可避免的過程,下面我們就來看看cast庫在Golang中的具體應(yīng)用吧
    2024-11-11
  • 深入理解Go語言中的Dispatcher

    深入理解Go語言中的Dispatcher

    最近看到了Go語言中的Dispatcher,但是在網(wǎng)上發(fā)現(xiàn)資料非常少,所以想著總結(jié)處理分享給大家,下面這篇文章主要給大家深入的介紹Go語言中Dispatcher的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • Go語言 channel如何實現(xiàn)歸并排序中的merge函數(shù)詳解

    Go語言 channel如何實現(xiàn)歸并排序中的merge函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Go語言 channel如何實現(xiàn)歸并排序中merge函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • GoRoutines高性能同時進行多個Api調(diào)用實現(xiàn)

    GoRoutines高性能同時進行多個Api調(diào)用實現(xiàn)

    這篇文章主要為大家介紹了GoRoutines高性能同時進行多個Api調(diào)用實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論