在javascript中可以用 func1.apply(this,[...])
的语句实现多个参数调用给func1方法去执行,而golang中似乎没有直接的方法。
为此我查了一下别人怎么搞得:http://stackoverflow.com/questions/17555857/go-unpacking-array-as-arguments
看了最靠谱的答案是这个:
package main
import "fmt"
import "reflect"
func my_func(a, b int) (int) {
return a + b
}
func main() {
arr := []int{2,4}
var args []reflect.Value
for _, x := range arr {
args = append(args, reflect.ValueOf(x))
}
fun := reflect.ValueOf(my_func)
result := fun.Call(args)
sum := result[0].Interface().(int)
fmt.Println("Sum is ", sum)
}
然而这个答案没有被采纳。。但这个答案给了我解决问题的关键点,使用反射来实现不定参数的传递。我稍微整理了一下,最后得出以下测试代码:
package main
import (
"fmt"
"reflect"
)
func Apply(handle (interface{}), argv ... interface{}) ([]reflect.Value) {
var args []reflect.Value
for _, x := range argv {
args = append(args, reflect.ValueOf(x))
}
fun := reflect.ValueOf(handle)
result := fun.Call(args)
return result
}
func main() {
xy := Apply(func (a, b int) (int,int) {
return a + b , a - b
},12,34);
fmt.Println("Sum is ",xy[0],xy[1])
}
参考资料:
http://stackoverflow.com/questions/17555857/go-unpacking-array-as-arguments
http://xhrwang.me/2014/12/29/golang-fundamentals-8-interface.html
相关文档
暂无
随便看看
畅言模块加载中