[GO] 變參函數-GO中函數傳遞變長參數

若是函數的最後一個參數是採用 ...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;
相關文章
相關標籤/搜索