Stories

Detail Return Return

Go 語言泛型用法詳解 - Stories Detail

本文將帶你從零開始,理解Go 泛型的概念、語法、使用方式,並配有示例代碼,幫助你快速上手。

文章目錄 

  • 什麼是泛型?
  • 1. 泛型函數

    • 示例:一個求長度的泛型函數
  • 2. 泛型結構體

    • 示例:一個通用的盒子
  • 3. 泛型集合(Set)

    • 示例:一個通用的集合
  • 4. 泛型通道(Channel)

    • 示例:一個通用的通道
  • 5. 泛型方法

    • 示例:一個通用的棧
  • 6. 泛型迭代器

    • 示例:一個通用的迭代器
  • 7. 泛型工廠函數

    • 示例:一個通用的對象工廠
  • 8. Go 1.24 新特性:泛型類型別名

    • 示例:定義泛型類型別名
  • 結語

Go 語言自 1.18 版本起支持 泛型(Generics) ,這讓 Go 代碼可以更加通用,減少重複代碼,提高開發效率。Go 1.24 進一步增強了泛型支持,引入了 泛型類型別名,讓代碼更簡潔。

本文將帶你從零開始,理解 Go 泛型的概念、語法、使用方式,並配有示例代碼,幫助你快速上手。

什麼是泛型?

簡單來説,泛型 就是讓我們編寫可以適用於多種數據類型的代碼。換句話説,泛型讓你可以定義一個函數或數據結構,它可以處理任何類型的數據,而不需要事先指定類型。你只需要在使用時決定具體的類型。

1. 泛型函數

泛型函數是泛型最基本的應用。它允許你編寫一個函數,可以接收任何類型的參數並返回相應的結果。

示例:一個求長度的泛型函數

假設你要寫一個求切片長度的函數。沒有泛型時,你可能需要為不同類型的切片寫不同的函數:

func LengthInt(s []int) int {
    return len(s)
}

func LengthString(s []string) int {
    return len(s)
}

但有了泛型,我們就可以寫一個通用的函數來處理不同類型的切片:

func Length[T any](s []T) int {
    return len(s)
}

這裏的 T 是泛型類型,它表示函數 Length 可以接受任何類型的切片。any 表示“任何類型都行”。這樣,你就可以用它來求任意類型切片的長度了:

sliceInt := []int{1, 2, 3, 4, 5}
sliceString := []string{"a", "b", "c"}

fmt.Println(Length(sliceInt))    // 輸出: 5
fmt.Println(Length(sliceString)) // 輸出: 3

 title=

2. 泛型結構體

除了函數,結構體 也可以使用泛型。這意味着你可以寫一個通用的數據結構,適應不同類型的數據。

閲讀全文:Go 語言泛型用法詳解 - 阿小信的博客

user avatar tianmiaogongzuoshi_5ca47d59bef41 Avatar aitaokedemugua Avatar segmentfault Avatar freeman_tian Avatar zero_dev Avatar dunizb Avatar febobo Avatar tongbo Avatar imba97 Avatar wu_cat Avatar munergs Avatar libubai Avatar
Favorites 72 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.