Golang中"foo ...int"和"foo []int"的区别
Golang中"foo …int"和"foo []int"的区别 大家好,
我想了解以下两段代码之间的区别:
func main() {
s := []int{1, 2, 3, 4, 5, 6, 7, 8}
t := sumall(s)
fmt.Println(t)
}
func sumall(x []int) int {
n := 0
for _, v := range x {
n += v
}
return n
}
和这段:
func main() {
s := []int{1, 2, 3, 4, 5, 6, 7, 8}
t := sumall( s...)
fmt.Println(t)
}
func sumall(x ...int) int {
n := 0
for _, v := range x {
n += v
}
return n
}
在第一段代码中,我将切片传递给函数“sumall”,而在第二段中,我传递的是“s…”,并且在函数中是“x …int”。 两者返回相同的结果,那么使用其中一种或另一种会有很大区别吗?
提前感谢
更多关于Golang中"foo ...int"和"foo []int"的区别的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
区别在于调用函数的方式。 第一个函数接受一个整数切片作为输入,而第二个函数接受可变数量的整数值。
例如,你可以这样调用第二个函数:
sumall(1, 2, 3, 4)
更多关于Golang中"foo ...int"和"foo []int"的区别的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
如果您没有预分配的切片,而是只想调用一个函数,这种区别就尤为重要……想象一下,如果没有可变参数,使用 fmt.Printf 会是多么笨拙……
fmt.Printf("%v %v", "foo", "bar")
# 对比
fmt.Printf("%v %v", []interface{}{"foo", "bar"})


