Go语言内部处理变参时,实际上是转换成切片的。那么,为什么不直接使用切片作为参数呢?
示例
切片参数替换变参
package main
import (
"fmt"
)
func find(num int, nums []int) {
fmt.Printf("type of nums is %T\n", nums)
found := false
for i, v := range nums {
if v == num {
fmt.Println(num, "found at index", i, "in", nums)
found = true
}
}
if !found {
fmt.Println(num, "not found in ", nums)
}
fmt.Printf("\n")
}
func main() {
find(89, []int{89, 90, 95})
find(45, []int{56, 67, 45, 90, 109})
find(78, []int{38, 56, 98})
find(87, []int{})
}
与上一节中的示例比较一下,以下是使用变参代替切片参数的优点。
- 在函数调用时不需要创建切片。例如,
find(89, []int{89, 90, 95})
后面一个参数实际上创建了一个切片。 - 对于变参,可以不传入参数,但切片参数不能省略。例如,
find(87, []int{})
不能省略后一个参数,虽然该切片是空的。 - 变参函数比使用切片参数的函数可读性更好。