[GO] 变参函数-GO中函数传递变长参数

前端之家收集整理的这篇文章主要介绍了[GO] 变参函数-GO中函数传递变长参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如果函数的最后一个参数是采用 ...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: …
         }
     }
 }

 

实际运用,在gorm的查询数据时,有使用变参函数,函数定义

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;

 

猜你在找的Go相关文章