勵志

勵志人生知識庫

go的泛型

Go語言的泛型是在Go 1.18版本中正式引入的,它允許在編譯時期發現類型不匹配的錯誤,而不是在運行時期。泛型通過類型參數化實現,可以在函式名後面加上類型參數列表來實現。

泛型函式是指可以接受任意類型的函式。例如,下面的代碼定義了一個泛型函式Map,它接受一個函式和一個切片作為參數,並返回一個新的切片,新切片中的元素是由原切片中的元素通過給定函式處理後得到的結果。

```go

func Map[T,U any](ffunc(T)U,list []T) []U {

newList := make([]U, len(list))

for i, v := range list {

newList[i] = f(v)

}

return newList

}

```

Go語言的泛型還引入了類型形參(Type parameter)、類型實參(Type argument)、類型形參列表(Type parameter list)、類型約束(Type constraint)和實例化(Instantiations)等概念。類型形參類似於一個占位符,代表未來將要傳入的具體類型。類型約束通過接口來約束類型參數,指定類型參數必須滿足哪些行為。

例如,下面的代碼定義了一個泛型類型Slice,它的底層類型可以是int、float32或float64等。

```go

type Slice[T int|float32|float64] []T

```

總的來說,Go的泛型提供了更大的靈活性和可復用性,同時也提高了代碼的安全性和可讀性。