Variadic functions (...T)

yourbasic.org/golang

If the last parameter of a function has type ...T it can be called with any number of trailing arguments of type T.

func Sum(nums ...int) int {
    res := 0
    for _, n := range nums {
        res += n
    }
    return res
}

func main()
    fmt.Println(Sum())        // 0
    fmt.Println(Sum(1, 2, 3)) // 6
}

The actual type of ...T inside the function is []T.

You can pass a slice s directly to a variadic funtion using the s... notation. In this case no new slice is created.

primes := []int{2, 3, 5, 7}
fmt.Println(Sum(primes...)) // 17

Append is variadic

As a special case, you can append a string to a byte slice using the built-in append function.

var buf []byte
buf = append(buf, 'a', 'b')
buf = append(buf, "cd"...)
fmt.Println(buf) // [97 98 99 100]