Golang 变量函数
用不同的参数数调用的函数被称为变量函数。 fmt.Printf 是一个变量函数的例子,它在开始时需要一个固定的参数,之后可以接受任何数量的参数。
要点: 在变量函数的声明中,最后一个参数的类型前面有一个省略号,即( ... )。它表示该函数可以在任何数量的该类型的参数下被调用。
语法
function function_name(para1, para2...type)type {// code...}
- 在函数内部……类型的行为就像一个片断。例如,假设我们有一个函数签名,即add( b…int)int,现在参数在函数内部是[]int类型。
- 你也可以在一个变量函数中传递一个现有的slice。要做到这一点,我们将完整数组的一个片断传递给函数,如下面例2所示。
- 当你在variadic函数中没有传递任何参数时,那么函数中的片断就是空的。
- variadic函数一般用于执行字符串格式化的函数。
- 你也可以在variadic函数中传递多个片断。
- 你不能使用变量参数作为返回值,但你可以把它作为一个片断返回。
例1 :
// Go program to illustrate the
// concept of variadic function
package main
import (
"fmt"
"strings"
)
// Variadic function to join strings
func joinstr(elements ...string) string {
return strings.Join(elements, "-")
}
func main() {
// zero argument
fmt.Println(joinstr())
// multiple arguments
fmt.Println(joinstr("GEEK", "GFG"))
fmt.Println(joinstr("Geeks", "for", "Geeks"))
fmt.Println(joinstr("G", "E", "E", "k", "S"))
}
输出
GEEK-GFG
Geeks-for-Geeks
G-E-E-k-S
注意: 输出的第一行是空的,因为在程序中我们首先在没有任何参数的情况下调用了我们的函数 joinstr(即零参数情况),由于这个原因,它返回一个空字符串。
例2 :
// Go program to illustrate the
// concept of variadic function
package main
import (
"fmt"
"strings"
)
// Variadic function to join strings
func joinstr(elements ...string) string {
return strings.Join(elements, "-")
}
func main() {
// pass a slice in variadic function
elements := []string{"geeks", "FOR", "geeks"}
fmt.Println(joinstr(elements...))
}
输出
geeks-FOR-geeks
当我们使用一个Variadic函数时
- Variadic函数可以用来代替向一个函数传递分片。
- 当我们不知道参数的数量时,就可以使用变量函数。
- 当你在程序中使用variadic函数时,会增加程序的可读性。
- 当你的函数的参数很可能不是来自一个单一的数据结构(如切片或数组等)时,变量函数就特别有用。
- 在这种情况下,使用变量函数可以避免创建一个数据结构来直接传递参数给函数。