go传递变长参数
如果函数的最后一个参数是采用 …type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。
func myFunc(a, b, arg ...int) {}
示例函数和调用:
func Greeting(prefix string, who ...string)
Greeting("hello:", "Joe", "Anna", "Eileen")
在 Greeting 函数中,变量 who 的值为 []string{“Joe”, “Anna”, “Eileen”}。 如果参数被存储在一个数组 arr 中,则可以通过 arr… 的形式来传递参数调用变参函数。
- 使用结构 定义一个结构类型,假设它叫 Options,用以存储所有可能的参数:
 
  type Options struct {
      par1 type1,
      par2 type2,
      ...
  }
函数 F1 可以使用正常的参数 a 和 b,以及一个没有任何初始化的 Options 结构: F1(a, b, Options {})。如果需要对选项进行初始化,则可以使用 F1(a, b, Options {par1:val1, par2:val2})。 2. 使用空接口 如果一个变长参数的类型没有被指定,则可以使用默认的空接口 interface{},这样就可以接受任何类型的参数。该方案不仅可以用于长度未知的参数,还可以用于任何不确定类型的参数。一般而言我们会使用一个 for-range 循环以及 switch 结构对每个参数的类型进行判断:
  func typecheck(..,..,values … interface{}) {
      for _, value := range values {
          switch v := value.(type) {
              case int: …
              case float: …
              case string: …
              case bool: …
              default: …
          }
      }
  }