Golang是否支持可变参数功能?


69

我想知道是否可以在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

19
一切都与Ruby有关。
Damien Roche

1
Ruby做了这样的事情放置long_string [-3 ..- 1]

Answers:


99

据我所知,您已经了解了很多,但是语法是...int。见规格

给定功能并调用

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

在Greeting中,who将具有价值[]string{"Joe", "Anna", "Eileen"}


18
TL; DR; varargs隐式转换为切片。如果要使用任意类型的varargs,请使用... interface {}
2013年

...interface{}在函数声明中使用@fuz时,如何用单个变量调用它?
Big Money

1
没关系,我想通了。如果其他人有问题,这是我的解决方法:play.golang.org/p/PvqevBGAAv
Big Money

6

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

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,))
}

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.