Go Em Exemplos: Variadic Functions

Funções variádicas podem ser chamads com qualquer número de argumentos. Por exemplo, fmt.Println é uma função variádica comumente utilizada.

package main
import "fmt"

Aqui está uma função que aceitará um número arbitrário de inteiros ints como argumento(s). Atenção para o operador de espalhamento (spread operator) que deve preceder a declaração do tipo.

func sum(nums ...int) {
    fmt.Print(nums, " ")
    total := 0

Dentro da função, o tipo nums é equivalente a []int. É possível usar len(nums), iterar utilizando range, etc.

    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}
func main() {

Funções variádicas pode ser chamada de forma usual com argumentos individuais.

    sum(1, 2)
    sum(1, 2, 3)

Se uma slice com multiplos argumentos estiver disponível, é possível passá-la como parâmetro para uma função variádica usando func(slice...). Atenção que agora o operador de espalhamento deve suceder o nome do parâmetro.

    nums := []int{1, 2, 3, 4}
    sum(nums...)
}
$ go run variadic-functions.go 
[1 2] 3
[1 2 3] 6
[1 2 3 4] 10

Outro aspecto chave de funções em Go é a capacidade para formar fechamentos (closures), que serão apresentados em seguida.

Próximo exemplo: Closures.