Go中三个点(...)用法 深入浅析Go中三个点(...)用法
踏雪无痕SS 人气:0想了解深入浅析Go中三个点(...)用法的相关内容吗,踏雪无痕SS在本文为您仔细讲解Go中三个点(...)用法的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Go中三个点(...)用法,Go中三个点...,下面大家一起来学习吧。
‘…' 其实是go的一种语法糖。
它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。
第二个用法是slice可以被打散进行传递。
实例:
package main import ( "fmt" ) func main(){ name(1,2,3,4,5,6,7,8,9) //多个不确定数量的参数 var strss= []string{ "qwr", "234", "yui", "cvbc", } test1(strss...) //切片被打散传入 strss... 等同于 "qwr","234","yui","cvbc" } func name(args ...int) {//可以接受任意个int参数 for _, v:= range args{ fmt.Println(v) } } func test1(args ...string) { //可以接受任意个string参数 for _, v:= range args{ fmt.Println(v) } }
下面看下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 ./...
加载全部内容