首页 >后端开发 >Golang >如何在 Go 中编写数值类型的泛型函数?

如何在 Go 中编写数值类型的泛型函数?

Barbara Streisand
Barbara Streisand原创
2024-12-18 00:00:14592浏览

How to Write a Generic Function for Numerical Types in Go?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn