Funzioni Variadiche

Una funzione variadica accetta un numero indefinito di argomenti tutti dello stesso tipo.

Può accettare anche argomenti definiti, che devono essere dichiarati prima di quelli variadici: solo l'ultimo argomento può essere variadico, e ve ne può essere uno solo.

(140variadic-functions.go):

package main

import "fmt"

// Funzione variadica
// Un numero qualsiasi di argomenti dello stesso tipo
func sum(nums ...int) {
	fmt.Print(nums, " ")
	total := 0
	// range scandisce gli argomenti
	// Il primo parametro è l'indice
	for _, num := range nums {
		total += num
	}
	fmt.Println(total)
}

func main() {

	// Invocazione di funzione variadica
	sum(1, 2)
	sum(1, 2, 3)

	// Una funzione variadica accetta come parametro
	// attuale una collezione
	nums := []int{1, 2, 3, 4}
	sum(nums...)
}

Molte funzioni di libreria sono variadiche, p.es. fmt.Printf().

L'argomento formale variadico ha i tre punti prima del tipo, senza spazi.

L'argomento attuale variadico ha i tre punti dopo il nome, senza spazi.