1. 用于数组: 表示长度与元素个数相同.golang
在golang中数组的长度是类型的一部分,不一样长度,不一样类型.c#
2. 用于参数: 用于形参表示可变参数. 用于实参表示直接传递. 具体解释参数见官方文档:数组
传递可变参数时:ui
(1) 若是实参后不跟..., 则在底层建立与形参类型相同的slice,而后将实参赋值后传递.this
(2) 若是实参后跟..., 则不在底层建立与形参类型相同的slice,而是直接将实参传递给形参.code
/ref/spec#Passing_arguments_to_..._parametersci
...
parametersIf f
is variadic with a final parameter p
of type ...T
, then within f
the type of p
is equivalent to type []T
. If f
is invoked with no actual arguments for p
, the value passed to p
is nil
. Otherwise, the value passed is a new slice of type []T
with a new underlying array whose successive elements are the actual arguments, which all must be assignable to T
. The length and capacity of the slice is therefore the number of arguments bound to p
and may differ for each call site.element
Given the function and calls文档
func Greeting(prefix string, who ...string)
Greeting("nobody")
Greeting("hello:", "Joe", "Anna", "Eileen")get
within Greeting
, who
will have the value nil
in the first call, and []string{"Joe", "Anna", "Eileen"}
in the second.
If the final argument is assignable to a slice type []T
, it may be passed unchanged as the value for a ...T
parameter if the argument is followed by ...
. In this case no new slice is created.
Given the slice s
and call
s := []string{"James", "Jasmine"}Greeting("goodbye:", s...)
within Greeting
, who
will have the same value as s
with the same underlying array.