本文系第十三篇Golang语言学习教程
可变参数函数
参数数量可变的函数,称为可变参数函数。
最典型的例子就是fmt.Printf
和类似的函数。Print
首先接受一个必备的参数,之后接收任意个数的后续参数。
语法
如果函数的最后一个参数被记作...T
,那么函数可以接受任意个T
类型的参数作为最后一个参数。
声明可变函数
func sum(vals...int) int { //定义函数sum,vals被看作[]int类型的切片,sum可以接受任意数量的int类型参数
total := 0
for _, val := range vals{ //循环 vals 的值
total += val //将所有val加起来
}
return total //返回任意个int型参数的和
}
以上程序中,sum
函数返回任意个int
型参数的和
。vals
被看作[]int
类型的切片,sum
接收任意数量的int
型参数。
func main (){
fmt.Println(sum(1, 3, 5, 7)) // "16"
fmt.Println(sum(1, 1, 1)) // "3"
fmt.Println(sum()) // "0"
}
以上程序调用sum
函数计算输入值得和。
来写一个在输入整数列表中查看某个整数是否存在的程序:
package main
import "fmt"
func find(num int, nums...int) { //定义函数find, 接受任意数量的int型参数
found := false //首先定义 found 为错
for i, v := range nums { //循环 nums 的值
if v == num {
fmt.Println(num, "found at index", i, "in", nums)
found = true
} //如果循环到的值等于 num 参数,则输出位置,并且将found 置为true
}
if !found {
fmt.Println(num, "is not in", nums)
} //如果found 没有被置为true,则表明没有找到, 输出没有找到
}
func main (){
find(12, 5, 6, 12, 8, 9)
find(4, 5, 6)
find(67)
}
在以上程序中,find函数接收任意数量的int型参数。
可变参数函数的工作原理是将可变参数转换为一个新的切片,这是至关重要的。
在以上程序倒数第四行,find
函数中可变参数是5, 6, 12, 8, 9
,find 函数接收一个类型为int的可变参数。所以这五个参数被编译器转换为一个int类型切片 int []int{5, 6, 12, 8, 9}
,然后被传入find函数中。
for循环遍历nums
切片,如果num
在切片中,则输出num
位置,如果不在则提示未找到。
以上代码的输出结果为:
12 found at index 2 in [5 6 12 8 9]
4 is not in [5 6]
67 is not in []
find
函数仅有一个参数也是合法的,这样的情况下切片nums
是一个长度和容量都为0的nil
切片。
给可变参数传入切片
之前说可变参数函数的工作原理是将可变参数转换为一个新的切片,那么以正常方式将切片传入可变参数:
numbers := []int{5, 6, 7, 8}
find(7, numbers)
find函数规定,find(num int, nums...int)
,传入的可变参数只能是int类型的参数,所以直接将一个切片传入会报错cannot use numbers (type []int) as type int in argument to find
只需要在最后一个参数后加上省略符,就可以将切片传给find
函数:
package main
import "fmt"
func find(num int, nums...int) { //定义函数find, 接受任意数量的int型参数
found := false //首先定义 found 为错
for i, v := range nums { //循环 nums 的值
if v == num {
fmt.Println(num, "found at index", i, "in", nums)
found = true
} //如果循环到的值等于 num 参数,则输出位置,并且将found 置为true
}
if !found {
fmt.Println(num, "is not in", nums)
} //如果found 没有被置为true,则表明没有找到, 输出没有找到
}
func main (){
numbers := []int{5, 6, 7, 8}
find(7, numbers...)
}
以上为学习Golang 可变函数篇
有疑问加站长微信联系(非本文作者)