我正在經歷寫在谷歌的Go語言的一些代碼,我碰到這個傳來:「...」是什麼意思是在go函數聲明中的參數旁邊?
func Statusln(a ...interface{})
func Statusf(format string, a ...interface{})
我不明白什麼...
手段。有人知道嗎?
我正在經歷寫在谷歌的Go語言的一些代碼,我碰到這個傳來:「...」是什麼意思是在go函數聲明中的參數旁邊?
func Statusln(a ...interface{})
func Statusf(format string, a ...interface{})
我不明白什麼...
手段。有人知道嗎?
這意味着你可以用variable number of arguments來致電Statusln。例如,調用此函數:
Statusln("hello", "world", 42)
將分配參數以下值:
a := []interface{}{"hello", "world", 42}
所以,你可以在這片和過程中的所有參數,迭代不管有多少是。例如fmt.Printf()就是一個很好且流行的可變參數用法,它使用格式化字符串和可變數量的參數,這些參數將根據格式字符串進行格式化。
它是可變長度的參數
func Printf(format string, v ...interface{}) (n int, err error) {
採取例如此簽名。在這裏我們定義,我們有一個字符串打印,但這個字符串可以是interpolated用的東西可變數量(任意類型的)可分別代替(其實,我從FMT包此功能):
fmt.Printf("just i: %v", i)
fmt.Printf("i: %v and j: %v",i,j)
正如你可以在這裏看到,可變參數,一個簽名適合所有長度。
此外,您可以指定一些確切類型,如...int
。
它們是可變參數函數。他們接受可變數量的參數。
+1,感謝鏈接到文檔, – Ali 2013-11-20 14:40:34
FYI。如果在一個slice中已經有多個參數,在上例中使用'func(slice ...)'像'Statusln(a ...)'將它們應用到一個可變參數函數中。 – thuzhf 2016-03-02 15:11:03