【发布时间】:2016-06-15 16:37:05
【问题描述】:
我有一个类似下面的代码
package main
import "fmt"
func PrintThis(arg string) {
fmt.Printf("I'm printing %s", arg)
}
func PrintThisAndThat(arg1, arg2 string) {
fmt.Printf("Now printing %s and %s", arg1, arg2)
}
func Invoke(fn interface{}, args ...string) {
//fn(args...)
}
func main() {
Invoke(PrintThis, "foo")
Invoke(PrintThisAndThat, "foo", "bar")
}
这不是实际的生产代码,但这是一个简化版本。
问题:- 如果我取消注释 //fn(args...) 行,我会收到编译错误 prog.go:14: cannot call non-function fn (type interface {})
如何执行作为 Invoke() 函数的参数接收的函数?
实现这一目标的正确方法是什么?
【问题讨论】:
标签: generics reflection go interface