【Golang】Go中三个点(...)用法

众所周知,Go语言是严格类型语言,而开发的时候又遇到传入参数不定的情况,怎么办?

这里的三个点(…),就给我们编程人员带来很大的灵活性,具体如下

在Golang中,三个点一共会用在四个地方(话说三个点的官方说法是什么?):

 

代码如下:

package main

import (
	"fmt"
	"log"
)

func main() {
	//multiParam 可以接受可变数量的参数

	names := []string{"jerry", "herry"}

	//在数组文字中,...符号指定的长度等于文字中元素的数量。
	stooges := [...]string{"Moe", "Larry", "Curly"}
	stoogxs := []string{"Moe", "Larry", "Curly"}

	strParam("jerry", "herry")
	strParam(names...)

	//通过append合并两个slice
	stoogxs = append(stoogxs, names...)
	fmt.Println(stoogxs)

	//标识数组元素个数,这里,...意味着数组的元素个数
	log.Println(len(stooges))

	nums := []int{4, 5, 6}
	stoogns := [...]int{4, 5, 6}

	intParam(1, 2, 3)
	intParam(nums...)

	//标识数组元素个数,这里,...意味着数组的元素个数
	log.Println(len(stoogns))
}

func strParam(args ...string) {
	//接受的参数放在args数组中
	for _, e := range args {
		log.Println(e)
	}
}

func intParam(args ...int) {
	res := 0
	for _, n := range args {
		res += n
	}
	log.Println(res)

}

变长的函数参数

如果最后一个函数参数的类型的是...T,那么在调用这个函数的时候,我们可以在参数列表的最后使用若干个类型为T的参数。这里,...T在函数内部的类型实际是[]T.

func intParam(args ...int) {
	res := 0
	for _, n := range args {
		res += n
	}
	log.Println(res)
}

调用拥有变长参数列表的函数

上面调用Sum函数时,是将变长参数分开写的。如果我们有一个slice,那么我们调用时不必将slice拆开再调用,直接在slice后跟...即可:

nums := []int{4, 5, 6}
intParam(nums...)

标识数组元素个数

这里,...意味着数组的元素个数:

stooges := [...]string{"Moe", "Larry", "Curly"} // len(stooges) == 3

Go命令行中的通配符

描述包文件的通配符。
在这个例子中,会单元测试当前目录和所有子目录的所有包:

go test ./...



posted @ 2021-10-01 11:19  踏雪无痕SS  阅读(1118)  评论(1编辑  收藏  举报