Variadic Functions in Golang

variadic function(可變函式)可用不同數量的參數呼叫,最常見的是 fmt.Printf 系列。

宣告 variadic function 時,在最後一個參數的 type 前面加上 ...,表示這個 function 可以用任意數量的該 type 參數呼叫。

1
2
3
4
5
6
7
func sum(values ...int) int {
total := 0
for _, val := range values {
total += val
}
return total
}

在此 function 中,values 的 type 是 []int,call sum() 時可以給任意數量的 int

1
2
3
sum()
sum(3)
sum(1, 2, 3)

caller 會 implicit 分配 array、複製參數,然後將整個 array 的 slice 傳給 sum()sum(1, 2, 3) 的行為類似:

1
2
values := []int{1, 2, 3}
sum(values...)

參數已經在 slice 中時,以上述方式 call variadic function,即在最後一個參數後面加上 ...

雖然 ...int 參數在 function 中的行為如同 slice,但是 func f(...int) {}func g([]int) {} 兩個 function 的 type 是不同的。