文章首发于:clawhub.club


三个点‘…’ 是go的一种语法糖,本质上是一个数组切片。

作用

1、函数的不定参数

用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。

1
func x(args ...int){}

2、将切片拆散

slice可以被打散进行传递。

1
2
3
//将切片m(含有3个int型元素)拆散成单个int型作为参数调用函数x
m := make([]int, 3)
x(m...)

项目中碰到的例子

使用redis的发布订阅时,发现这边的不定参数用法,记录一下。

1
2
3
4
5
6
7
8
9
// Subscribe subscribes the client to the specified channels.
// Channels can be omitted to create empty subscription.
func (c *ClusterClient) Subscribe(channels ...string) *PubSub {
pubsub := c.pubSub()
if len(channels) > 0 {
_ = pubsub.Subscribe(channels...)
}
return pubsub
}

方法接受多个string类型channels,之后将切片打散,传到下一层方法中。