【问题标题】:Does Golang support variadic function?Golang 是否支持可变参数函数?
【发布时间】:2013-10-08 02:33:19
【问题描述】:

我想知道是否有一种方法可以在 Go 中为未知数量的变量定义一个函数。

类似的东西

func Add(num1... int) int {
    return args
}

func main() {
    fmt.Println("Hello, playground")
    fmt.Println(Add(1, 3, 4, 5,))
}

我想为任意数量的输入泛化函数Add

【问题讨论】:

  • 这与 Ruby 有什么关系?
  • 一切都与Ruby有关。
  • Ruby 做了这样的事情 puts long_string[-3..-1]

标签: go


【解决方案1】:

据我所知,你已经明白了,但语法是...int。见the spec

给定函数并调用

func Greeting(prefix string, who ...string)
Greeting("hello:", "Joe", "Anna", "Eileen")

在问候语中,who 的值将是 []string{"Joe", "Anna", "Eileen"}

【讨论】:

  • TL;DR;可变参数被隐式转换为切片。如果您想要任意类型的可变参数,请使用 ...interface{}
  • @fuz 在函数声明中使用...interface{} 时,如何用单个变量调用它?
  • 没关系,我想通了。如果其他人有问题,我就是这样做的:play.golang.org/p/PvqevBGAAv
【解决方案2】:

在使用可变参数时,您需要在函数内部的数据类型中使用循环。

func Add(nums... int) int {
    total := 0
    for _, v := range nums {
        total += v
    }
    return total  
}

func main() {
    fmt.Println("Hello, playground")
    fmt.Println(Add(1, 3, 4, 5,))
}

【讨论】:

    【解决方案3】:

    Golang 有一个非常简单的可变参数函数声明

    可以使用任意数量的尾随参数调用可变参数函数。例如,fmt.Println 是一个常见的可变参数函数。

    这是一个将任意数量的int 作为参数的函数。

    package main
    
    import (
        "fmt"
    )
    
    func sum(nums ...int) {
        fmt.Println(nums)
        for _, num := range nums {
            fmt.Print(num)
        }
    }
    
    func main() {
        sum(1, 2, 3, 4, 5, 6)
    }
    

    上述程序的输出:

    [1 2 3 4 5 6]

    1 2 3 4 5 6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-31
      • 2012-03-20
      • 2016-09-18
      • 1970-01-01
      • 2012-02-29
      • 2020-04-12
      • 1970-01-01
      相关资源
      最近更新 更多