首先什么是可变参数?可变参数,英文名称是:Varargs,一般指一个函数可以接受任意个数的参数,很多编程语言都支持可变参数,可变参数在某些特殊情况下可以简化编程的复杂度。

下面是Go中可变参数的一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main
import "fmt"
func foo(prefix string, who ...string) {
fmt.Println(prefix)
for name, _ := range who {
fmt.Println(name)
}
}
func main() {
foo("hello", "hao1", "hao2", "hao3")
foo("hello", []string{"hao1", "hao2", "hao3"}...)
}

可以看到,声明可变参数时需要在相应参数的类型前面添加...用来表示这是一个可变参数,可以通过两种方式来调用带有可变参数的函数,第一种是传任意个参数进去,第二种是将这些参数组织成一个分片然后作为一个参数传到函数中,在用分片的方式传参时,参数的最后要添加...来表示这是传给一个可变参数的,的函数内部看不到这两种差异。另外要注意,可变参数只能是函数的最后一个参数。

可变参数的个数可以是0,当可变参数的个数为0,也就是传该参数时,函数内部该参数会被设为nil