Accepting Variable Number of Arguments in a Function

Functions in Go are capable of accepting multiple number of arguments, also called as variadic functions. One prominent example of such a function is fmt.Println as you can pass in any number of variables, it will print each of them separated by a space.

The way to define a variadic function is to prepend the data type with three dots. That variable is now accessible as a slice and can be iterated.

Here is a simple example which explains it.

func sum(numbers ...int) int {
    total := 0
    for _, n := range numbers {
        total += n
    }
    return total
}

This is a simple sum function, which iterated through all numbers and returns back the total. Now to call this function, you just pass all the numbers as separate arguments.

total := sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

By declaring the argument as a ...int, your numbers variable is now passed into the function as a slice of integers. But what if you already have a slice of numbers and want to pass it to this function?

numbers := []int{1,2,3,4,5}
total := sum(numbers...)

You just have to pass in the slice followed by three dots to unwrap the slice into individual parameters to the function.