可变参数函数是接受无限数量的参数的函数。通常,它们以以下形式表示
func hello(friends ...string) {
// ...
}
从三个点很容易识别...
。
我们可以打电话hello()
像这样:
hello("tony", "mark", "mary", "joe")
或者:
hello("tony")
或使用无限数量的字符串。
来自标准库的示例:append()
append
是可变函数,定义为
func append(slice []Type, elems ...Type) []Type
一种常见用法是在位置上移走物品时i
从数组a
。
a = append(a[:i], a[i+1:]...)
该行通过移除位置上的项目来创建新切片i
在a
,方法是组合从0到i(不包括在内)以及从i + 1到末尾的项目。
目的是什么...
?
append
接受切片作为第一个参数,并接受无限数量的参数,所有参数都具有类型可分配的其元素的类型。
写作
a = append(a[:i], a[i+1:]...)
等同于写作
a = append(a[:i], a[i+1], a[i+2], a[i+3], a[i+4]) //and so on, until the end of the slice.
使用a[i+1:]...
基本上是一种简写语法,如Go规范中所述https://golang.org/ref/spec#Passing_arguments_to_..._parameters:
如果f是最终参数p为…T类型的可变参数,则在f内p的类型等效于[] T类型。如果在没有p实际参数的情况下调用f,则传递给p的值为nil。否则,传递的值是[] T类型的新切片,带有新的基础数组,其连续元素是实际参数,所有这些参数都必须可分配给T
更多教程:
- 使用NGINX反向代理服务Go服务
- 在Go中复制结构
- Go Web服务器的基础
- 在Go中对地图类型进行排序
- 简而言之去指针
- 转到标签说明
- 开始日期和时间格式
- 使用Go进行JSON处理
- 可变参数函数
- 去弦备忘单
- 转到空界面说明
- 使用VS Code和Delve调试Go
- 命名为Go返回参数
- 在Go中生成随机数和字符串
- Go项目的文件系统结构
- Go中的二进制搜索算法
- 在Go中使用命令行标志
- GOPATH解释
- 使用Go构建一个命令行应用程序:lolcat
- 使用Go构建CLI命令:Cowsay
- 在Go中使用壳管
- Go CLI教程:财富克隆
- 使用Go列出文件夹中的文件
- 使用Go从GitHub获取存储库列表
- 去,将一小段字符串附加到文件中
- 去,将字符串转换为字节片
- 使用Go可视化您本地的Git贡献
- Go CPU和内存分析入门
- 解决Go程序中的“不支持索引”错误
- 测量Go程序中的执行时间
- 使用Go构建Web爬网程序以检测重复的标题
- 最佳实践:指针还是价值接收者?
- 最佳实践:您应该使用方法还是函数?
- Go数据结构:集
- 前往地图备忘单
- 在Go中生成泛型类型的实现
- Go数据结构:字典
- Go数据结构:哈希表
- 在“通过通道”中实现事件侦听器
- Go数据结构:堆栈
- Go数据结构:队列
- Go数据结构:二进制搜索树
- Go数据结构:图形
- Go数据结构:链表
- Go数据结构的完整指南
- 比较Go值
- Go是面向对象的吗?
- 在Go中使用SQL数据库
- 在Go中使用环境变量
- 上篇教程:PostgreSQL支持的REST API
- 在Go Web服务器上启用CORS
- 在Docker容器中部署Go应用程序
- 为什么Go是作为PHP开发人员学习的功能强大的语言
- 去,删除io.Reader.ReadString换行符
- 开始,如何观看更改并重建程序
- 去算一下自约会以来的月份
- 在Go中访问HTTP POST参数