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