2012-04-12 118 views

回答

25

這意味着你可以用variable number of arguments來致電Statusln。例如,調用此函數:

Statusln("hello", "world", 42) 

將分配參數以下值:

a := []interface{}{"hello", "world", 42} 

所以,你可以在這片和過程中的所有參數,迭代不管有多少是。例如fmt.Printf()就是一個很好且流行的可變參數用法,它使用格式化字符串和可變數量的參數,這些參數將根據格式字符串進行格式化。

+0

+1,感謝鏈接到文檔, – Ali 2013-11-20 14:40:34

+0

FYI。如果在一個slice中已經有多個參數,在上例中使用'func(slice ...)'像'Statusln(a ...)'將它們應用到一個可變參數函數中。 – thuzhf 2016-03-02 15:11:03

5

它是可變長度的參數

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

是什麼意思呢?參數的數量沒有被指定? – Chaos 2012-04-12 17:36:11

+0

@shailesh我已經添加了示例 – 2012-04-12 17:45:42

+0

@ om-nom-nom感謝,現在很清楚 – Chaos 2012-04-12 17:55:59