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 ./...

Comments