如何在 Go 中为数值类型创建泛型函数
作为 JavaScript 和 TypeScript 用户,您可能想知道如何在 Go 中处理数值类型使用 int 和 float 时。本文探讨了创建可以接受任何数值参数的泛型函数的最佳方法。
Go 1.18 及以上版本中的泛型函数
随着类型参数的引入Go 1.18,您现在可以定义以类型 T 参数化的函数。利用接口约束,您可以将 T 限制为数字
func add[T Number](a, b T) T { return a + b }
这里,约束 Number 是使用 golang.org/x/exp/constraints 包定义的:
type Number interface { constraints.Integer | constraints.Float }
这个约束确保 T 必须是一个类型满足constraints.Integer或constraints.Float。
使用泛型函数
这个通用的 add 函数可以处理任何数字类型的参数。但是,请务必注意,两个参数必须属于同一类型。例如:
fmt.Println(add(1, 2)) // 3 fmt.Println(add(a, b)) // 3 fmt.Println(add(1.5, 3.2)) // 4.7
尝试混合类型,例如 add(2.5, 2),将导致编译错误。
复数支持
您可以扩展数字约束以包括复杂的types:
type Number interface { constraints.Integer | constraints.Float | constraints.Complex }
尽管复杂类型支持,算术运算符、-、* 和 / 仍然是唯一受支持的运算符。复杂类型不支持模 % 和按位运算符。
以上是如何在 Go 中编写数值类型的泛型函数?的详细内容。更多信息请关注PHP中文网其他相关文章!