我正在经历写在谷歌的Go语言的一些代码,我碰到这个传来:“...”是什么意思是在go函数声明中的参数旁边?
func Statusln(a ...interface{})
func Statusf(format string, a ...interface{})
我不明白什么...
手段。有人知道吗?
我正在经历写在谷歌的Go语言的一些代码,我碰到这个传来:“...”是什么意思是在go函数声明中的参数旁边?
func Statusln(a ...interface{})
func Statusf(format string, a ...interface{})
我不明白什么...
手段。有人知道吗?
这意味着你可以用variable number of arguments来致电Statusln。例如,调用此函数:
Statusln("hello", "world", 42)
将分配参数以下值:
a := []interface{}{"hello", "world", 42}
所以,你可以在这片和过程中的所有参数,迭代不管有多少是。例如fmt.Printf()就是一个很好且流行的可变参数用法,它使用格式化字符串和可变数量的参数,这些参数将根据格式字符串进行格式化。
它是可变长度的参数
func Printf(format string, v ...interface{}) (n int, err error) {
采取例如此签名。在这里我们定义,我们有一个字符串打印,但这个字符串可以是interpolated用的东西可变数量(任意类型的)可分别代替(其实,我从FMT包此功能):
fmt.Printf("just i: %v", i)
fmt.Printf("i: %v and j: %v",i,j)
正如你可以在这里看到,可变参数,一个签名适合所有长度。
此外,您可以指定一些确切类型,如...int
。
它们是可变参数函数。他们接受可变数量的参数。
+1,感谢链接到文档, – Ali 2013-11-20 14:40:34
FYI。如果在一个slice中已经有多个参数,在上例中使用'func(slice ...)'像'Statusln(a ...)'将它们应用到一个可变参数函数中。 – thuzhf 2016-03-02 15:11:03