概述
在函式的最後一個引數的資料型別之前加上省略號 ...
,表示該引數的資料型別是 變長型別
,
呼叫該函式時可以傳遞任意數量 ( 0 - N )
的該型別的引數。
一個函式只能有一個變長引數,且變長引數必須為最後一個引數。
例子
傳遞一個引數
package main
import "fmt"
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
func main() {
fmt.Printf("1 = %d\n", sum(1))
}
// $ go run main.go
// 輸出如下
/**
1 = 1
*/
傳遞多個引數
package main
import "fmt"
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
func main() {
fmt.Printf("1 + 2 + 3 = %d\n", sum(1, 2, 3))
}
// $ go run main.go
// 輸出如下
/**
1 + 2 + 3 = 6
*/
傳遞切片引數
如果要傳遞 切片型別
資料作為函式引數,只需要在引數後面加上省略號 ...
。
package main
import "fmt"
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
func main() {
numbers := []int{1, 2, 3}
fmt.Printf("1 + 2 + 3 = %d\n", sum(numbers...)) // 切片變數後面加 ... 即可
}
// $ go run main.go
// 輸出如下
/**
1 + 2 + 3 = 6
*/
不傳遞任何引數
package main
import "fmt"
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
func main() {
fmt.Printf("不傳遞任何引數 = %d\n", sum())
}
// $ go run main.go
// 輸出如下
/**
不傳遞任何引數 = 0
*/