如果函数的最后一个参数是采用 ...type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。
func myFunc(a,b,arg ...int) {} func Greeting(prefix string,who ...string) Greeting("hello:",JoeAnnaEileen")
这里函数在定义参数时是who ...string ,调用时传递了3个string类型的参数,在函数内who是[]string类型,可以遍历who这个变量来拿到数据
如果一个变长参数的类型没有被指定,则可以使用默认的空接口 interface{},这样就可以接受任何类型的参数。该方案不仅可以用于长度未知的参数,还可以用于任何不确定类型的参数。一般而言我们会使用一个 for-range 循环以及 switch 结构对每个参数的类型进行判断
func checkNames(..,..,values … interface{}) { for _,value := range values { switch v := value.(type) { case : … floatbooldefault: … } } }
func (s *DB) Select(query interface{},args ...interface{}) *DB
函数使用时
db.Select(name,age").Find(&users) //// SELECT name,age FROM users; db.Select([]string{nameage"}).Find(& db.Table(users").Select(COALESCE(age,?)42).Rows() / SELECT COALESCE(age,'42') FROM users;