可變參數函數

可變參數函數是接受無限數量的參數的函數。通常,它們以以下形式表示

func hello(friends ...string) {
    // ...
}

從三個點很容易識別...

我們可以打電話hello()像這樣:

hello("tony", "mark", "mary", "joe")

或者:

hello("tony")

或使用無限數量的字符串。

來自標準庫的示例:append()

append是可變函數,定義為

func append(slice []Type, elems ...Type) []Type

一種常見用法是在位置上移走物品時i從數組a

a = append(a[:i], a[i+1:]...)

該行通過移除位置上的項目來創建新切片ia,方法是組合從0到i(不包括在內)以及從i + 1到末尾的項目。

目的是什麼...

append接受切片作為第一個參數,並接受無限數量的參數,所有參數都具有類型可分配的其元素的類型。

寫作

a = append(a[:i], a[i+1:]...)

等同於寫作

a = append(a[:i], a[i+1], a[i+2], a[i+3], a[i+4]) //and so on, until the end of the slice.

使用a[i+1:]...基本上是一種簡寫語法,如Go規範中所述https://golang.org/ref/spec#Passing_arguments_to_..._parameters

如果f是最終參數p為…T類型的可變參數,則在f內p的類型等效於[] T類型。如果在沒有p實際參數的情況下調用f,則傳遞給p的值為nil。否則,傳遞的值是[] T類型的新切片,帶有新的基礎數組,其連續元素是實際參數,所有這些參數都必須可分配給T

操場


更多教程: