Üç nokta (...) ile başlayan bir parametre türü, değişken parametre olarak adlandırılır . Bu, bu parametreye herhangi bir sayı veya argüman geçirebileceğiniz anlamına gelir (tıpkı ile olduğu gibi fmt.Printf()
). İşlev, parametrenin bağımsız değişkenlerinin listesini, parametre için bildirilen türün bir dilimi olarak alır ( []interface{}
sizin durumunuzda). Git Şartname devletler:
Bir fonksiyon imzasındaki son parametrenin ön ekli bir tipi olabilir. Böyle bir parametreye sahip bir fonksiyona variadic adı verilir ve bu parametre için sıfır veya daha fazla argümanla çağrılabilir.
Bir parametre:
a ...interface{}
Eşdeğer işlev için:
a []interface{}
Aradaki fark, argümanları böyle bir işleve nasıl ilettiğinizdir. Dilimin her bir öğesini ayrı ayrı vererek veya tek bir dilim olarak yapılır, bu durumda dilim değerinin sonuna üç nokta eklemeniz gerekir. Aşağıdaki örnekler aynı çağrı ile sonuçlanacaktır:
fmt.Println("First", "Second", "Third")
Aynı şeyi yapacak:
s := []interface{}{"First", "Second", "Third"}
fmt.Println(s...)
Bu, Go Spesifikasyonunda da oldukça iyi açıklanmıştır :
İşlev ve çağrılar göz önüne alındığında
func Greeting(prefix string, who ...string)
Greeting("nobody")
Greeting("hello:", "Joe", "Anna", "Eileen")
içinde Greeting
, ilk çağrıda ve ikinci çağrıda who
değere sahip olacaktır .nil
[]string{"Joe", "Anna", "Eileen"}
Son bağımsız değişken bir dilim türüne atanabilirse , bağımsız değişkenin ardından []T
bir ...T
parametre değeri olarak değiştirilmeden geçirilebilir ...
. Bu durumda yeni dilim oluşturulmaz.
Dilim verildi s
ve çağrı
s := []string{"James", "Jasmine"}
Greeting("goodbye:", s...)
içinde Greeting
, aynı temel dizi ile who
aynı değere sahip olacaktır s
.