如果函式的最后一個引數是采用 ...type 的形式,那么這個函式就可以處理一個變長的引數,這個長度可以為 0,這樣的函式稱為變參函式,
示例函式和呼叫:
func myFunc(a, b, arg ...int) {} func Greeting(prefix string, who ...string) Greeting("hello:", "Joe", "Anna", "Eileen")
這里函式在定義引數時是who ...string , 呼叫時傳遞了3個string型別的引數,在函式內who是[]string型別 , 可以遍歷who這個變數來拿到資料
如果一個變長引數的型別沒有被指定,則可以使用默認的空介面 interface{},這樣就可以接受任何型別的引數,該方案不僅可以用于長度未知的引數,還可以用于任何不確定型別的引數,一般而言我們會使用一個 for-range 回圈以及 switch 結構對每個引數的型別進行判斷
func checkNames(..,..,values … interface{}) { for _, value := range values { switch v := value.(type) { case int: … case float: … case string: … case bool: … default: … } } }
實際運用 , 在gorm的查詢資料時 , 有使用變參函式 , 函式定義
func (s *DB) Select(query interface{}, args ...interface{}) *DB
函式使用時
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/174411.html
標籤:其他
