Go语言可变参数

可变参数

  • 参数数量可变的函数称为可变参数函数
  • 在声明可变参数函数时,需要在参数列表的最后一个参数类型之前加上省略符号"···",这表示该函数会接收任意数量的该类型参数。
func sum(values...int) {
    total := 0
    for _, value := range values {
        total += value
    }
    return total
}
  • 上面的sum函数返回任意个int参数的和。
  • 在函数体中,values被看做是类型为 []int 的切片。sum函数可以接收任意个数量的int参数
fmt.Println(sum())          //"0"
fmt.Println(sum(3))         //"3"
fmt.Println(sum(1,2,3,4))   //"10"
  • 上面的代码中,调用者隐式地创建一个数组,并将原始参数复制到数组中,再把数组的一个切片作为参数传给被调用函数。
  • 如果原始参数已经是切片类型,我们该如何传递给sum?只需要在最后一个参数后加上省略号。
values := []int{1,2,3,4}
fmt.Println(sum(values...))   //"10"
  • 虽然在可变参数函数内部,···int 型参数的行为看起来很像切片类型,但是实际上,可变参数函数和以切片作为参数的函数是不同的。
func f(...int) {}
func g([]int) {}

fmt.Println("%T\n", f)      //"func(...int)"
fmt.Println("%T\n", g)      //"func([]int)" 
  • 可变参数经常被用于格式化字符串
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容