Go 如何编写一个函数来处理';编号';在戈兰?

Go 如何编写一个函数来处理';编号';在戈兰?,go,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

来自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
}

我是否需要将所有内容都转换为float(因为它“覆盖”了int范围),还是为每种类型创建一个单独的函数,比如
addInt(a int,b int)int
addFloat(a float64,b float64)float64
,或者是否有更优雅的方法?

在语言中添加泛型时,会有更好的答案

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

add(float64(a)、float64(b))

事实上的方法是知道您希望接收什么类型的参数,并接受它。@Flimzy如果我只在理解您的意思后才使用该函数,但我考虑使用一个可重用的函数。如果您对不精确性感到满意,请使用float64。如果需要精度,可能需要多个函数。请注意,float不包含整数范围。对于大整数,可能没有精确相等的浮点值。不过,一般的答案是回到你的实际目标并做到这一点。一个简单的计算器对“任何类型的数值”都不起作用。它对一些数字类型起作用,这些数字类型是您设计系统时所使用的(通常是浮点或定点)。写你的函数就可以了。谢谢你提供的信息,你是绝对正确的,它不能涵盖int的全部范围。我想我对如何定义函数有一个大致的想法。我想这现在回答了这个问题,尽管它可能会导致不精确。而且,只定义将来可能添加为float64的所有值可能更简单,以防止每次运行时的转换。另外,我有点难过没有泛型(但似乎是?),但我也能理解添加这一特性所带来的成本。顺便说一句,“一切都是浮点”方法是JavaScript本身的工作方式。泛型是为添加到语言中而计划的(并且是松散安排的)。它从永远以来就一直被要求,但是这个项目天生就抵制大的变化,仿制药将是Go 1以来最大的变化。