Golang支持可变参数函数吗?

75
我想知道是否有一种方法可以在Go语言中定义未知数量变量的函数。
类似这样:
func Add(num1... int) int {
    return args
}

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

我希望将函数Add推广至任意数量的输入。


1
这与Ruby有什么关系? - tckmn
21
一切都与Ruby有关。 - Damien Roche
1
Ruby 像这样做 puts long_string[-3..-1] - user2671513
3个回答

105

据我所知,你已经基本掌握了它,但语法是...int。请参见规范

 

给定函数和调用

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

Greeting函数内,who变量的值为[]string{"Joe", "Anna", "Eileen"}


19
简短版:可变参数会自动转换为切片,如果需要任意类型的可变参数,请使用...interface{}翻译:在Go语言中,当你定义一个函数时,可以使用可变参数来接受不确定数量的参数。这些可变参数将被自动转换为切片类型。如果你需要传递任意类型的可变参数,可以使用"...interface{}"作为参数类型。 - fuz
@fuz 当在函数声明中使用...interface{}时,您如何使用单个变量调用它? - Big Money
2
没事了,我解决了。如果其他人也遇到这个问题,这是我解决的方法:https://play.golang.org/p/PvqevBGAAv - Big Money

7

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接