使用Array作为函数调用参数

时间:2014-09-13 22:31:49

标签: go

在JavaScript中,您可以使用.apply来调用函数并传入一个数组/切片以用作函数参数。

function SomeFunc(one, two, three) {}

SomeFunc.apply(this, [1,2,3])

我想知道Go中是否有相同的内容?

func SomeFunc(one, two, three int) {}

SomeFunc.apply([]int{1, 2, 3})

Go示例只是为了给你一个想法。

2 个答案:

答案 0 :(得分:2)

它们被称为可变函数并使用...语法,请参阅语言规范中的Passing arguments to ... parameters

一个例子:

package main

import "fmt"

func sum(nums ...int) (total int) {
    for _, n := range nums { // don't care about the index
        total += n
    }
    return
}

func main() {
    many := []int{1,2,3,4,5,6,7}

    fmt.Printf("Sum: %v\n", sum(1, 2, 3)) // passing multiple arguments
    fmt.Printf("Sum: %v\n", sum(many...)) // arguments wrapped in a slice
}

Playground example

答案 1 :(得分:0)

可以使用反射,特别是Value.Call,但是你真的应该重新考虑为什么要这样做,也要考虑接口。

fn := reflect.ValueOf(SomeFunc)
fn.Call([]reflect.Value{reflect.ValueOf(10), reflect.ValueOf(20), reflect.ValueOf(30)})

playground