当在go函数声明中的参数旁边时,“...”是什么意思?

时间:2012-04-12 17:33:19

标签: go

我正在阅读一些用Google的Go语言编写的代码,我遇到了这个:

func Statusln(a ...interface{})
func Statusf(format string, a ...interface{})

我不明白...的含义。有人知道吗?

3 个答案:

答案 0 :(得分:26)

这意味着您可以使用variable number of arguments呼叫Statusln。例如,使用以下命令调用此函数:

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

将为参数指定以下值:

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

因此,您可以迭代此切片a并处理所有参数,无论有多少参数。可变参数的一个好的和流行的用例是例如fmt.Printf(),它接受格式字符串和可变数量的参数,这些参数将根据格式字符串进行格式化。

答案 1 :(得分: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

答案 2 :(得分:1)

它们是可变函数。他们接受可变数量的参数。