在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中文網其他相關文章!