什么是可变参数函数

可变参数函数是可以灵活传递参数数量的函数。

Variadic functions are functions that are flexible about the number of arguments you can pass into it.

如何使用可变参数函数

可变参数函数使用 3 个点定义,…

这是一个例子,其中 shoppingList(第 8 行)是一个可变参数函数。

可变参数函数 - 图1

第 21 行:我们使用 3 个字符串参数调用 shoppingList 函数。

We call the shoppingList function with 3 string arguments.

Line 8: The …string indicates that “items” is a variadic input parameter. This tells Go to capture all the arguments into a string slice variable called “items”.


Lines 10-11: This confirms that items are indeed a string slice variable that’s housing all the arguments.

第 13-15 行:for 循环遍历切片并打印出每个切片条目。

数据类型构成可变参数输入参数定义的一部分,例如…int,这是因为可变参数输入参数捕获的参数必须都是该数据类型。

所以回到我们的例子,这意味着以下会失败:

可变参数函数 - 图2所以如果你想传入其他数据类型的参数,你可以包含常规的输入参数;但是,在这些情况下必须最后定义可变输入参数。

可变参数函数 - 图3

切片和可变参数函数

如果要使用的参数存储在切片变量中,则可以使用...notation 来扩展它

可变参数函数 - 图4

第 21 行:我们创建了一个新的切片变量,其中包含我们想要传递给 shoppingList 函数的“items”输入参数的所有字符串参数。
第 23 行:这里的 ... 符号告诉 Go 将切片变量自动扩展为单个参数。

You might have realised by now, you can use slices as an alternative to variadic functions (可变参数函数)

here we’ve rewritten the previous example to use slices instead:

可变参数函数 - 图5

第 7 行:我们将可变输入参数替换为字符串切片 []string

第 23 行:我们删除了 … 以便 list_of_items 切片变量现在以其原始形式传递到函数中。

因此,是否决定在项目中编写可变参数函数实际上是一个偏好问题。但要记住的一件事是可变参数函数具有以下约束:

:::warning You can only specify one variadic input parameter in your variadic function

:::

因此,如果您有 2 组或更多组参数要传递到函数中,您可以切换到使用切片,或者使用一个可变参数函数,其余使用切片。