在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示例只是为了给你一个想法。
答案 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
}
答案 1 :(得分:0)
可以使用反射,特别是Value.Call
,但是你真的应该重新考虑为什么要这样做,也要考虑接口。
fn := reflect.ValueOf(SomeFunc)
fn.Call([]reflect.Value{reflect.ValueOf(10), reflect.ValueOf(20), reflect.ValueOf(30)})