Go: Three dots (ellipsis) notation
The three dots ... notation is used in four different places in Go:
Variadic function parameters
If the last parameter of a function has type ...T, it can be called with any number of trailing arguments of type T.
The actual type of ...T inside the function is []T.
Example: This function can be called with for instance Sum(1, 2, 3) or Sum().
func Sum(nums ...int) int {
res := 0
for _, n := range nums {
res += n
}
return res
}
Arguments to variadic functions
You can pass a slice s directly to a variadic funtion by "unpacking" it using the s... notation. In this case no new slice is created.
Example: Passing a slice to the Sum function:
primes := []int{2, 3, 5, 7}
fmt.Println(Sum(primes...)) // 17
Array literals
In an array literal, the ... notation specifies a length equal to the number of elements in the literal.
Example: Array literal with length inferred:
stooges := [...]string{"Moe", "Larry", "Curly"}
// len(stooges) == 3
The go command
Three dots are used by the go command as a wildcard when describing package lists.
Example: Tests all packages in the current directory and its subdirectories:
$ go test ./...