2012-04-12 115 views

回答

25

这意味着你可以用variable number of arguments来致电Statusln。例如,调用此函数:

Statusln("hello", "world", 42) 

将分配参数以下值:

a := []interface{}{"hello", "world", 42} 

所以,你可以在这片和过程中的所有参数,迭代不管有多少是。例如fmt.Printf()就是一个很好且流行的可变参数用法,它使用格式化字符串和可变数量的参数,这些参数将根据格式字符串进行格式化。

+0

+1,感谢链接到文档, – Ali 2013-11-20 14:40:34

+0

FYI。如果在一个slice中已经有多个参数,在上例中使用'func(slice ...)'像'Statusln(a ...)'将它们应用到一个可变参数函数中。 – thuzhf 2016-03-02 15:11:03

5

它是可变长度的参数

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

是什么意思呢?参数的数量没有被指定? – Chaos 2012-04-12 17:36:11

+0

@shailesh我已经添加了示例 – 2012-04-12 17:45:42

+0

@ om-nom-nom感谢,现在很清楚 – Chaos 2012-04-12 17:55:59