前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[GO] 变参函数-GO中函数传递变长参数

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

作者头像
唯一Chat
发布2020-10-27 17:33:39
8320
发布2020-10-27 17:33:39
举报
文章被收录于专栏:陶士涵的菜地

如果函数的最后一个参数是采用 ...type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。

示例函数和调用:

代码语言:javascript
复制
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 结构对每个参数的类型进行判断

代码语言:javascript
复制
func checkNames(..,..,values … interface{}) {
     for _, value := range values {
         switch v := value.(type) {
             case int: …
             case float: …
             case string: …
             case bool: …
             default: …
         }
     }
 }

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

代码语言:javascript
复制
func (s *DB) Select(query interface{}, args ...interface{}) *DB

函数使用时

代码语言:javascript
复制
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;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档