若是函數的最後一個參數是採用 ...type 的形式,那麼這個函數就能夠處理一個變長的參數,這個長度能夠爲 0,這樣的函數稱爲變參函數。php
示例函數和調用:函數
func myFunc(a, b, arg ...int) {} func Greeting(prefix string, who ...string) Greeting("hello:", "Joe", "Anna", "Eileen")
這裏函數在定義參數時是who ...string , 調用時傳遞了3個string類型的參數,在函數內who是[]string類型 , 能夠遍歷who這個變量來拿到數據spa
若是一個變長參數的類型沒有被指定,則能夠使用默認的空接口 interface{},這樣就能夠接受任何類型的參數。該方案不只能夠用於長度未知的參數,還能夠用於任何不肯定類型的參數。通常而言咱們會使用一個 for-range 循環以及 switch 結構對每一個參數的類型進行判斷code
func checkNames(..,..,values … interface{}) { for _, value := range values { switch v := value.(type) { case int: … case float: … case string: … case bool: … default: … } } }
實際運用 , 在gorm的查詢數據時 , 有使用變參函數 , 函數定義orm
func (s *DB) Select(query interface{}, args ...interface{}) *DB
函數使用時blog
db.Select("name, age").Find(&users) //// SELECT name, age FROM users; db.Select([]string{"name", "age"}).Find(&users) //// SELECT name, age FROM users; db.Table("users").Select("COALESCE(age,?)", 42).Rows() //// SELECT COALESCE(age,'42') FROM users;