求问下面的Add2这里怎么实现?sum为interface好像没法任意求和?
func Add(vars ... int)(ret int){
var sum int
for _,v := range vars {
//fmt.Println("v",v)
sum += v
}
return sum
}
//这里怎么实现?sum为interface好像没法任意求和?
func Add2(vars ... interface{})(ret interface{}){
/* var sum interface{}
for _,v := range vars {
switch v.(type){
case int:
sum += v
case float64:
sum += v
case string:
sum += v
}
} */
return sum
}
func main() {
fmt.Println(Add2(1,2))
fmt.Println(Add2(1,2,3))
fmt.Println(Add2(2.4, 3.6, 1.0))
fmt.Println(Add2("Hello", "world", "zhong"))
}
你的应该存在一个潜在的前提,就是传入的参数是一致的类型。
下面的例子,取第一个值的类型,作为整个相加运算的类型,如果有和第一个类型不一致的数据会被忽略,用到了反射。
输出