通过名称调用其他包中的方法?

4

我想通过反射包使用方法名称调用另一个包中的方法,但我不确定该如何实现。

目前我的尝试是:

reflect.ValueOf(controller).MethodByName(action_name).Call()

(其中控制器是另一个包)
有什么想法吗?

我认为这是不可能的。https://groups.google.com/forum/#!topic/golang-nuts/56pdjuF0dXo - lukad
1个回答

2

使用pkg/reflect无法实现此操作。要使其正常工作,包必须是一等公民,但实际上并非如此。

最好的方法是将要访问的函数存储在map[string]interface{}中,并在映射中查找函数:

func Foo() { println("foo?") }

m := map[string]interface{}{
    "foo": Foo
}

f := m["foo"].(func())
f()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接