一文了解 Go 语言可变参数(...parameters) 的使用

yufei       1 年, 8 月 前       386


可变参数,其实我觉得更应该称呼为 数量不固定参数,不过大家都这么称呼,那就还是用原来的吧。

可变参数 的需求,只有一个用户,就是 传递给函数的参数数量未知的,可能传一个,也可能多个,也可能一个都不传

我以前很傻的以为: 那我为了预防未来的不确定性,我可以用多定义几个参数,先放着,用得着的时候再用就是了

现在想想真幼稚:

  1. 未来谁也说不定,可能认为一个就好,但是要用的时候可能一个就不够了。
  2. 参数的类型,可能定义的时候是 int,用的时候可能就是 string 了。

所以啊,可变参数 能不用则不用,实在没办法了就用吧。

使用语法

声明可变参数

func SumOf(nums ...interface{}){}   // 数据类型未知
func SumOf(nums ...int8){}          // 数据类型为 int8
func Greeting(prefix string, who ...string) // 必须是最后一个参数

可变参数类型的声明和普通参数的声明,唯二的区别就是:

  1. 类型前面多了三个点 ...
  2. 可变参数类型要在参数函数的末尾,比如 func SumOf(nums ...int8,op string){} 这样就不行了。

使用声明后的可变参数

可变参数 在函数内,其实是一个 slice,类型相当于切片类型 []T,比如上面的

func SumOf(nums ...interface{}){}   // 相当于 []interface{}
func SumOf(nums ...int8){}          // 相当于  []int8
func Greeting(prefix string, who ...string) //相当于 []string

既然可变参数的效果等价于 []T ,那么我们就可以当作 切片 类型来使用

func SumOf(nums ...int8) {
    sum := 0
    for _, num := range nums {
        sum += int(num)
    }
    println(sum)
}

可变参数如何传参

根据可变参数原本的意思,可变参数的传参数可以普通的一个一个参数的传,比如

SumOf(1, 2, 3, 34, 5)
SumOf(1, 2, 3)
SumOf(1, 3)
SumOf(1)

另外一种传参方法就是传递切片给它,比如

nums := []int8{1, 2, 3, 5, 6, 11}
SumOf(nums...)

当然了,这种传参方法要注意的是,**三个点 ... 要放在参数的后面。

其实现代编辑器,也不用死记硬背在哪里,如果放在前面错了,就放后面好了,总之要记住一定要三个点就是了

范例代码

上面的所有范例代码,汇总如下

package main

func SumOf(nums ...int8) {
    sum := 0
    for _, num := range nums {
        sum += int(num)
    }
    println(sum)
}

func main() {
    SumOf(1, 2, 3, 34, 5)
    SumOf(1, 2, 3)
    SumOf(1, 3)
    SumOf(1)

    nums := []int8{1, 2, 3, 5, 6, 11}
    SumOf(nums...)
}
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.