首页 > 解决方案 > 如何编写一个接受任何数值类型的泛型函数?

问题描述

来自 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) intaddFloat(a float64, b float64) float64或者是否有更优雅的方式?

标签: gogenerics

解决方案


直到 Go 1.17(预泛型)。查看其他答案以获取更新的解决方案


最简单的选择是只在调用站点转换参数。

add(float64(a), float64(b))

推荐阅读