es6中有扩展运算符,形如...,三个点, 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。 在Golang中也是有...,但是好像却没有名字,可能是博主孤陋寡闻吧。

下面就汇总一下...Golang中的用法。

1.在数组中

最原始,最简单声明或初始化,就是直接指明数组长度:

var intArray [10]int
var strArray [5]string{"成都","高新区"}
fmt.Println(intArray)
fmt.Println(strArray)

上面的方法虽然简单,但是每次都要确保提供的初始值与数组长度一致,开发者不提供初始值,编译器也会使用类型的零值帮助补全,上面的输出如下:

[0 0 0 0 0 0 0 0 0 0]
[成都 高新区   ]

我们可以使用...来声明,让编译器根据初始值的个数自行推断数组的长度

var intArray = [...]int{}
var intArray1 = [...]int{1}
var strArray = [...]string{"成都", "高新区"}
fmt.Println(intArray)
fmt.Println(intArray1)
fmt.Println(strArray)
[]
[1]
[成都 高新区]

2.在函数中

2.1 可变参数定义

【Golang】快速复习指南QuickReview(四)——函数提到了可变参数…

func Sum(x ...int) int {
	//此时x是一个切片
	sum := 0
	for _, v := range x {
		sum = sum + v
	}
	return sum
}

需要注意的点:可变参数一定是函数最右侧的参数。

2.2 可变参数传值

调用具有可变参数的函数时,除了传不定数量的参数,还可以使用...用以解压切片传值:

func main(){
	var intA = []int{1, 2, 3}
	sum1 := Sum(1, 2, 3, 4, 5)
	sum2 := Sum(intA...)
	println(sum1)
	println(sum2)
}

func Sum(x ...int) int {
    //此时x是一个数组
    sum := 0
    for _, v := range x {
        sum = sum + v
    }
    return sum
}
15
6

类似的,还可以参考内置函数append()

func append(slice []Type, elems ...Type) []Type

当append一个切片时,用法与上面是一样的:

var intA = []int{1, 2, 3}
var intB = []int{5}
intA = append(intA, intB...)