Jenis parameter yang diawali dengan tiga titik (...) disebut parameter variadic . Itu berarti Anda dapat meneruskan angka atau argumen apa pun ke dalam parameter itu (seperti dengan fmt.Printf()). Fungsi tersebut akan menerima daftar argumen untuk parameter sebagai bagian dari tipe yang dideklarasikan untuk parameter ( []interface{}dalam kasus Anda). The Go Keterangan negara:
Parameter terakhir dalam tanda tangan fungsi mungkin memiliki tipe yang diawali dengan .... Fungsi dengan parameter seperti itu disebut variadic dan dapat dipanggil dengan nol atau lebih argumen untuk parameter itu.
Parameter A:
a ...interface{}
Is, untuk fungsi yang setara dengan:
a []interface{}
Perbedaannya adalah bagaimana Anda meneruskan argumen ke fungsi tersebut. Hal ini dilakukan baik dengan memberikan setiap elemen potongan secara terpisah, atau sebagai potongan tunggal, dalam hal ini Anda harus memberikan akhiran nilai potongan dengan tiga titik. Contoh berikut akan menghasilkan panggilan yang sama:
fmt.Println("First", "Second", "Third")
Akan melakukan hal yang sama seperti:
s := []interface{}{"First", "Second", "Third"}
fmt.Println(s...)
Ini juga dijelaskan dengan cukup baik di Spesifikasi Go :
Mengingat fungsi dan panggilannya
func Greeting(prefix string, who ...string)
Greeting("nobody")
Greeting("hello:", "Joe", "Anna", "Eileen")
di dalam Greeting, whoakan memiliki nilai nildi panggilan pertama, dan []string{"Joe", "Anna", "Eileen"}di panggilan kedua.
Jika argumen terakhir []Tdapat ditetapkan ke tipe slice , argumen tersebut dapat diteruskan tanpa diubah sebagai nilai untuk ...Tparameter jika argumen diikuti oleh .... Dalam hal ini tidak ada potongan baru yang dibuat.
Mengingat potongan sdan panggilan
s := []string{"James", "Jasmine"}
Greeting("goodbye:", s...)
dalam Greeting, whoakan memiliki nilai yang sama sdengan array dasar yang sama.