go语言 – 变参与切片参数

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{})
}

与上一节中的示例比较一下,以下是使用变参代替切片参数的优点。

  1. 在函数调用时不需要创建切片。例如,find(89, []int{89, 90, 95})后面一个参数实际上创建了一个切片。
  2. 对于变参,可以不传入参数,但切片参数不能省略。例如,find(87, []int{})不能省略后一个参数,虽然该切片是空的。
  3. 变参函数比使用切片参数的函数可读性更好。


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载