go - 如何编写一个接受任何数值类型的泛型函数?
问题描述
来自 JS / TS,我想结帐并制作一个简单的计算器,因为 int 和 float 之间存在区别,编写带任意数字的函数的首选方法是什么?
例如:
package main
func add(a float64, b float64) float64 {
return a + b;
}
func main() {
a := 1;
b := 2;
fmt.Println(add(1, 2)); // 3
fmt.Println(add(a, b)); // cannot use a (type int) as type float64 in argument to add
fmt.Println(add(1.5, 3.2)); // 4.7
fmt.Println(add(2.5, 2)); // 4.5
}
我是否需要将所有内容都转换为浮点数(因为它“覆盖”了 int 范围),或者我是否需要为每种类型创建一个单独的函数addInt(a int, b int) int
,addFloat(a float64, b float64) float64
或者是否有更优雅的方式?
解决方案
直到 Go 1.17(预泛型)。查看其他答案以获取更新的解决方案
最简单的选择是只在调用站点转换参数。
add(float64(a), float64(b))
推荐阅读
- c# - 使用 protobuf-net 反序列化具有某些字段的派生类型的对象
- javascript - 在 jQuery 中,如何从当前元素“开始”选择节点(仅使用字符串选择器)?
- microsoft-graph-api - Ms Graph:如何使用 SDK 推迟提交文件?
- android - 如何根据android中的另一个日期获取未来日期?
- c# - 如何计算两个日期时间之间的平均持续时间,并在 C# 的单独列表中按日期对平均值进行分组
- python - Zipline-trader:未知语法 [{'sid': Equity(1576 [JPM])} -
- html - ng-autocomplete 不重叠对话框
- laravel - 两个字段都可以为空,但填写时只需要一个
- python - 根据 GridLayout 中的文本对齐:kivy
- shell - 如何在 shell 脚本中读取数组数组?