Di bawah ini adalah bagian dari kode Go yang saya pertanyakan. Secara khusus, apa yang ada a
di fungsi ini?
func DPrintf(format string, a ...interface{}) (n int, err error) {
if Debug > 0 {
n, err = fmt.Printf(format, a...)
}
return
}
Adakah yang bisa memberi tahu saya apa tiga titik di sini? Dan apa yang ...interface{}
dilakukannya?
Jawaban:
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 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 :
sumber
Sejauh
interface{}
istilahnya, itu adalah antarmuka kosong. Dengan kata lain, antarmuka diimplementasikan oleh semua variabel di Go.Ini semacam analogi
java.lang.Object
atauSystem.Object
dalam C #, tetapi malah termasuk setiap jenis variabel dalam bahasa tersebut. Jadi ini memungkinkan Anda meneruskan apa pun ke metode ini.sumber