首頁 >後端開發 >Golang >Go 中的泛型如何處理不同數字類型的切片?

Go 中的泛型如何處理不同數字類型的切片?

DDD
DDD原創
2024-12-25 02:12:16396瀏覽

How Can Generics in Go Handle Slices of Different Numeric Types?

在Go 中將泛型與不同類型的切片一起使用

Go 中泛型的考慮涉及到介面核心類型的概念。介面約束(例如 NumberSlice)沒有核心類型,因為它包含多個基礎類型(例如 []int64 和 []float64)。當嘗試在泛型函數中迭代切片時,這會造成障礙。

要解決此問題,一種方法是更改​​介面以強制使用基本類型,使切片類型在函數簽章中確定:

type Number interface {
    int64 | float64
}

func add[N Number](n []N) {
    for _, v := range n {
        fmt.Println(v)
    }
}

然而,更徹底但更詳細的解決方案涉及在介面中明確聲明核心類型約束:

type NumberSlice[N int64 | float64] interface {
    ~[]N
}

func add[S NumberSlice[N], N int64 | float64](n S) {
    for _, v := range n {
        fmt.Println(v)
    }
}

此方法確保介面具有特定的基礎類型([]N),且函數可以接受和處理 int64 或 float64 的切片。

以上是Go 中的泛型如何處理不同數字類型的切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn