在Go 中為數值型別編寫泛型函數
在Go 中,當使用不同的數值型別(如int 和float64)時,有必要建立特定於類型的函數或將值轉換為通用類型。更優雅的方法是使用類型參數和介面約束來編寫泛型函數。
使用型別參數與數量限制
在Go 1.18 及更高版本中,您可以定義具有型別參數T 並將T 限制為Number 介面的泛型函數,定義如下:
import "golang.org/x/exp/constraints" type Number interface { constraints.Integer | constraints.Float }
This限制包括所有有符號和無符號整數類型以及浮點類型。您的泛型函數可以寫成:
func add[T Number](a, b T) T { return a + b }
呼叫泛型函數
使用此泛型函數,您現在可以對任兩個數值類型的參數執行算術運算。例如:
a := 1 b := 2.5 fmt.Println(add(a, b)) // 3.5
限制
請注意,泛型函數的參數必須具有相同的型別。此外,函數內可以執行的操作僅限於數字限制中所有類型支援的操作(即 、-、* 和 /)。
處理複數
Go 也支援複雜型別(complex64 和complex128)。如果你想將它們包含在泛型函數中,你可以擴展數字約束以包含約束。 Complex:
type Number interface { constraints.Integer | constraints.Float | constraints.Complex }
請記住,Go 中的算術運算符也受複雜類型支持,除了 %運算符和位元運算符,僅整數類型支援。
以上是如何在 Go 中編寫通用函數來處理不同的數值類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!