在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")
Greeting
,who
有价值[]string{"Joe", "Anna", "Eileen"}
如果最后一个参数可以分配给一个slicetypes[] T,那么如果参数后面是…,那么它可以作为… T参数的值不变地传递。在这种情况下,不会创build新的分片。
给定切片和呼叫
s := []string{"James", "Jasmine"} Greeting("goodbye:", s...)
在
Greeting
,谁将具有与具有相同基础数组的s相同的值。
就interface{}
,它是空的接口。 换句话说,Go中所有variables实现的接口。
这类似于C#中的java.lang.object
或system.object
,但是包含了语言中的每个variablestypes。 所以它可以让你通过任何方法。