在Golang的圆点圆点。 与空括号的接口

这是一个Golang代码段我有问题:这个函数中的“a”是什么?

func DPrintf(format string, a ...interface{}) (n int, err error) { if Debug > 0 { n, err = fmt.Printf(format, a...) } return 

有谁能告诉我这是什么点的点? 那么...interface{}做什么的?

这点网点真的很难谷歌,想知道他们的含义谢谢!

以三个点(…)为前缀的参数types称为可变参数 。 这意味着你可以传递任何数字或参数到该参数(就像使用fmt.Printf() )。 该函数将接收参数的参数列表,作为为参数( []interface{}声明的types的一个片段)。 Go规格说明:

函数签名中的最后一个参数的types前缀可能是….带有这样一个参数的函数被称为可变参数(variadic),可以用该参数的零个或多个参数来调用。

参数:

 a ...interface{} 

是,相当于:

 a []interface{} 

不同的是你如何将parameter passing给这样一个函数。 它可以通过单独给每片或者作为一个片来完成,在这种情况下,你将不得不以三个点为后缀。 以下示例将导致相同的调用:

 fmt.Println("First", "Second", "Third") 

会做同样的事情:

 s := []interface{}{"First", "Second", "Third"} fmt.Println(s...) 

Go规范也对此进行了很好的解释:

给定function和调用

  func Greeting(prefix string, who ...string) Greeting("hello:", "Joe", "Anna", "Eileen") 

Greetingwho有价值[]string{"Joe", "Anna", "Eileen"}

如果最后一个参数可以分配给一个slicetypes[] T,那么如果参数后面是…,那么它可以作为… T参数的值不变地传递。在这种情况下,不会创build新的分片。

给定切片和呼叫

  s := []string{"James", "Jasmine"} Greeting("goodbye:", s...) 

Greeting ,谁将具有与具有相同基础数组的s相同的值。

interface{} ,它是空的接口。 换句话说,Go中所有variables实现的接口。

这类似于C#中的java.lang.objectsystem.object ,但是包含了语言中的每个variablestypes。 所以它可以让你通过任何方法。