英文:
Call method in other package by name?
问题
我正在尝试使用反射包中的方法来调用另一个包中的方法,但我不确定具体该如何做。
目前我尝试的是:
reflect.ValueOf(controller).MethodByName(action_name).Call()
(其中controller是另一个包)
有什么想法吗?
英文:
I'm trying to call a method in another package by the name of the method (using the reflect package) but I'm not sure exactly how to do it.
What I'm trying so far is,
reflect.ValueOf(controller).MethodByName(action_name).Call()
(where controller is the other package)
Any ideas?
答案1
得分: 2
你可以使用pkg/reflect
来实现这个功能。为了使其工作,包需要成为一等公民,但实际上它们并不是。
你最好的选择是将你想要访问的函数存储在map[string]interface{}
中,并在map中查找函数:
func Foo() { println("foo?") }
m := map[string]interface{}{
"foo": Foo,
}
f := m["foo"].(func())
f()
这样可以通过m["foo"]
来获取函数,并将其转换为func()
类型,然后调用该函数。
英文:
You can't do this using pkg/reflect
. For this to work, packages would need to be first class citizens, which they are not.
Your best bet is to store the functions you want to access in a map[string]interface{}
and look up
the function in the map:
func Foo() { println("foo?") }
m := map[string]interface{}{
"foo": Foo
}
f := m["foo"].(func())
f()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论