可变参数函数

可变参数函数是接受无限数量的参数的函数。通常,它们以以下形式表示

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

操场


更多教程: