如何实现多态变参数的求和?
求问下面的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"))
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你的应该存在一个潜在的前提,就是传入的参数是一致的类型。
下面的例子,取第一个值的类型,作为整个相加运算的类型,如果有和第一个类型不一致的数据会被忽略,用到了反射。
输出
你想要的是泛型吧?凑合写了一个,忽略与第一个参数不同类型的值。