学习需要耐心&&时间,更重要的是你要学会坚持!
当前位置:首页 > Go语言 > 正文

深入浅析 Go语言中 三个点(...) 的用法

2022-03-10 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 ./...
 

以上是本文的全部内容,希望对大家学习有帮助,也希望大家多多支持 磊丰的技术博客 感谢阅读!

站长磊丰学长
男,文化程度不高,性格有点犯二,爱好学习与分享,闲着没事喜欢研究各种代码,写写文章,潜水技术宅。
关注公众号:PHP自学中心
关注公众号:Go语言学习圈
学习与交流:程序员技术微信群

标签

网站工具箱