23

我正在浏览一些用谷歌的 Go 语言编写的代码,我遇到了这个:

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

我不明白是什么...意思。有人知道吗?

4

3 回答 3

31

这意味着您可以使用可变数量的参数调用 Statusln 。例如,使用以下命令调用此函数:

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

将为参数 a 分配以下值:

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

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

于 2012-04-12T17:41:32.017 回答
6

它是可变长度参数

func Printf(format string, v ...interface{}) (n int, err error) {

以这个签名为例。这里我们定义我们有一个要打印的字符串,但是这个字符串可以用可变数量的东西(任意类型)进行插值来替代(实际上,我从 fmt 包中获取了这个函数):

fmt.Printf("just i: %v", i)
fmt.Printf("i: %v and j: %v",i,j)

正如您在此处看到的,使用可变参数,一个签名适合所有长度。

此外,您可以指定一些确切的类型,例如...int.

于 2012-04-12T17:35:05.433 回答
1

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

于 2015-05-24T22:27:19.510 回答