欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)
  • 面向結構體,作為結構體里面字段的類型

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 面向結構體,作為結構體里面字段的類型

我們先看一下正常結構體的寫法如下:

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(類型形參)兩種場景使用的詳細內容,更多關于go泛型type parameters的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

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

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

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

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

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

    RPM是RPM Package Manager(RPM軟件包管理器)的縮寫,這篇文章主要給大家介紹了關于利用rpm打包上線部署golang代碼的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    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加密算法的接口鑒權

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

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

    Golang中類型轉換利器cast庫的用法詳解

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

    深入理解Go語言中的Dispatcher

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

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

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

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

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

最新評論