众所周知,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 ./...

【Golang】三个点(...)用法的更多相关文章

  1. golang 的 http cookie 用法

    golang的http cookie用法 在服务端程序开发的过程中,cookie经常被用于验证用户登录.golang 的 net/http 包中自带 http cookie的定义,下面就来讲一下coo ...

  2. Greeplum 系列(三) 基本用法

    Greeplum 系列(三) 基本用法 <PostgreSQL 教程>:https://www.yiibai.com/postgresql 一.Greeplum 登陆与创建 1.1 登陆 ...

  3. golang的select典型用法

    golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作. 示例: ch1 := make (chan in ...

  4. golang 三个点的用法

    已经忘了这是第几次查这个用法了,还是记一下吧~ ^ _ ^ 本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/137 ...

  5. golang 三个点 '...' 的用法

    package main import "fmt" func main(){ fmt.Println("Hello, World!") aaa := []str ...

  6. go中三个点(...)用法

    go命令中三个点含义 An import path is a pattern if it includes one or more "..." wildcards, each of ...

  7. Golang中Label的用法

    在Golang中能使用Label的有goto, break, continue.,这篇文章就介绍下Golang中Label使用和注意点. 注意点: Label在continue, break中是可选的 ...

  8. golang枚举类型 - iota用法拾遗

    在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...

  9. MYSQL学习笔记 (三)JOIN用法

    数据库的操作分开增删改查,其中查询操作基本占系统的90%,大家所说的优化SQL语句基本是优化查询语句.接下来将学习JOIN的用法,JOIN包括:INNER JOIN(内连接).LEFT JOIN(左外 ...

随机推荐

  1. C#多线程---ReaderWriterLock实现线程同步

    一.简介 当我们需要对一个共享资源多次读取的时候,用前面Monitor的同步锁就没有必要了.因为同步锁每次只允许一个线程访问共享资源,其他线程都会阻塞. 此时,通过ReaderWriterLock类可 ...

  2. dubbo暴露原理及引用过程

    服务暴露 服务引用:

  3. Linkerd 2.10(Step by Step)—3. 自动轮换控制平面 TLS &Webhook TLS 凭证

    Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...

  4. MediaWiki 语法简介

    本文尚在完善中... 图片 图片官方教程 图文并茂的内容读起来总是更加舒服,让我们在wiki里引入图片. 内部图片 上传图片 点击右侧上传文件,上传文件后会获得文件名 编辑图片 文件上传后在编辑框,如 ...

  5. opencv入门系列教学(五)图像的基本操作(像素值、属性、ROI和边框)

    0.序言 每个图像是由一个个点组成的,而这些点可以表示为像素值的形式. 这篇博客里我们将学会: 访问像素值并修改它们 . 访问图像属性 . 设置感兴趣区域(ROI) . 分割和合并图像. 对于图像的基 ...

  6. 带你走进MySQL全新高可用解决方案-MGR

    ​一.初识MGR 相信很多人对MGR这个词比较陌生,其实MGR(全称 MySQL Group Replication [MySQL 组复制])是Oracle MySQL于2016年12月发布MySQL ...

  7. spring AOP事务

    1 <bean id="tttt" class="com.ry.project.dataSouces.UserLogger"/> 2 <aop ...

  8. Ubuntu中配置tomcat

    1.从网上下载的tomcat配置失败后,servername那一栏写不了,必须要删除工作空间的配置文件 sudo rm /home/{username}/workspace/.metadata/.pl ...

  9. Linux与Windows文件同步

    Linux与Windows文件同步 本次采用的同步方式是rsync,Rsync是一款免费且强大的同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限.时间.软硬链接.第一次同步时会复制全 ...

  10. Linux下sed找出IP中第四位

    ip addr|sed -n '9p'|egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|sed -nr 's#^.*inet (.*) b ...