英文:
How to reflect dynamic method name of an object in Golang
问题
示例
router.Get(path, handler) // 正常工作
methodStr = "Get"
router.methodStr(path, handler) // 错误
funcs := map[string]func(){"methodStr": "Get"}
router.funcs["methodStr"](path, handler) // 错误
reflect.ValueOf(router).MethodByName("Get").Call([]reflect.Value{}) // 错误
我正在以字符串形式获取方法名。如何使用字符串名称调用路由器对象的方法?
英文:
example
router.Get(path, handler) // works fine
methodStr = "Get"
router.methodStr(path, handler) // error
funcs := map[string]func(){"methodStr": "Get"}
router.funcs["methodStr"](path, handler) // error
reflect.ValueOf(router).MethodByName("Get").Call([]reflect.Value{}) // error
I am getting method names as strings. How to call the router object methods with string names
答案1
得分: 1
你的第一个和第二个错误不是有效的Go代码,所以我不确定你对它们有什么期望。最后一个使用反射的例子没有为需要两个参数的函数提供任何参数,这将导致程序崩溃。添加这两个参数可以正常工作:
args := []reflect.Value{
reflect.ValueOf("path"),
reflect.ValueOf("handler"),
}
reflect.ValueOf(router).MethodByName("Get").Call(args)
请注意,这是一个Go代码示例,用于使用反射调用router
对象的Get
方法,并传递两个参数。
英文:
The first two errors you have aren't valid Go, so I'm not sure what you would expect from them. The last example with reflect doesn't have any arguments for a function that requires 2, which will panic. Adding the 2 arguments works fine:
http://play.golang.org/p/mSziWdW0hn
args := []reflect.Value{
reflect.ValueOf("path"),
reflect.ValueOf("handler"),
}
reflect.ValueOf(router).MethodByName("Get").Call(args)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论