zoukankan      html  css  js  c++  java
  • [GO] 变参函数-GO中函数传递变长参数

    如果函数的最后一个参数是采用 ...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;
  • 相关阅读:
    IOS-在ARC项目中使用非ARC框架或者类库
    IOS-Social.framework
    IOS- 单例
    IOS-二维码的实现
    IOS-JSON & XML解析
    SCOI2011 地板 (BZOJ2331)
    Formula 1(URAL1519)
    Tour in the Castle(ZOJ3256 矩阵加速插头dp)
    Tony's tour(poj1739,男人题之一,插头dp)
    POJ3133(插头dp)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13826472.html
Copyright © 2011-2022 走看看