Функции с переменным числом аргументов

Многоточие ...T позволяет принимать произвольное количество аргументов одного типа:

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

fmt.Println(sum(1, 2, 3))        // 6
fmt.Println(sum(10, 20, 30, 40)) // 100

Внутри функции nums — обычный срез []int.

Если данные уже в срезе, его можно распаковать оператором ...:

nums := []int{1, 2, 3}
fmt.Println(sum(nums...))   // 6

Указатели и variadic-параметры независимы — их можно сочетать:

func appendTo(dst *[]string, vals ...string) {
    *dst = append(*dst, vals...)
}

var result []string
appendTo(&result, "a", "b", "c")
fmt.Println(result) // [a b c]

ЗаданиеСложность
1Упражнение 1easy
2Упражнение 2medium
3Упражнение 3medium