【问题标题】:Call method in other package by name?按名称调用其他包中的方法?
【发布时间】:2014-01-09 18:07:30
【问题描述】:

我正在尝试通过方法的名称(使用反射包)调用另一个包中的方法,但我不确定该怎么做。

到目前为止,我正在尝试的是,

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

(其中控制器是另一个包)

有什么想法吗?

【问题讨论】:

标签: reflection methods controller go


【解决方案1】:

您无法使用pkg/reflect 执行此操作。为此,包需要是一等公民,而他们不是。

最好的办法是将要访问的功能存储在map[string]interface{} 中并查找 地图中的功能:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2012-02-16
    • 2021-05-28
    • 1970-01-01
    • 2012-11-28
    • 2010-11-08
    • 2011-08-26
    相关资源
    最近更新 更多