# 3 dots in 4 places

Can you name four places where three dots (...) are used 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`

.

This example 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 function if you unpack it with the `s...`

notation.
In this case no new slice is created.

In this example, we pass 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.

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

This command tests all packages in the current directory and its subdirectories.

`$ go test ./`**...**