golang的"..."備忘

1. 用於數組: 表示長度與元素個數相同.golang

    在golang中數組的長度是類型的一部分,不一樣長度,不一樣類型.c#

2. 用於參數: 用於形參表示可變參數. 用於實參表示直接傳遞. 具體解釋參數見官方文檔:數組

    傳遞可變參數時:ui

    (1) 若是實參後不跟..., 則在底層建立與形參類型相同的slice,而後將實參賦值後傳遞.this

    (2) 若是實參後跟..., 則不在底層建立與形參類型相同的slice,而是直接將實參傳遞給形參.code

/ref/spec#Passing_arguments_to_..._parametersci

Passing arguments to ... parameters

If 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.

相關文章
相關標籤/搜索