Reflection 如何获取GO中func()参数内传递的参数值?
我试图在routes内部创建中间件,并想知道如何获得func参数中传递的参数值 例如:Reflection 如何获取GO中func()参数内传递的参数值?,reflection,go,arguments,func,Reflection,Go,Arguments,Func,我试图在routes内部创建中间件,并想知道如何获得func参数中传递的参数值 例如: func (c appContainer) Get(path string, fn func(rw http.ResponseWriter, req *http.Request)) { // HOW DO I GET THE VALUES OF rw AND req PASSED IN fn func()? c.providers[ROUTER].(Routable).Get(path,
func (c appContainer) Get(path string, fn func(rw http.ResponseWriter, req *http.Request)) {
// HOW DO I GET THE VALUES OF rw AND req PASSED IN fn func()?
c.providers[ROUTER].(Routable).Get(path, fn)
}
我查看了反射文档,但我不清楚,或者有更简单的方法
编辑解决方案
事实证明,正如亚当在回复这篇文章时以及杰森在回答我的问题时所建议的那样,反思是不必要的
其思想是创建一个新的匿名函数,然后在调用原始函数之前拦截传递给它进行修改/增强的参数
这就是我最后所做的,它像一个符咒一样发挥作用,我正在发布它,以防它对其他人有所帮助:
type handlerFn func(rw http.ResponseWriter, req *http.Request)
func (c appContainer) Get(path string, fn handlerFn) {
nfn := func(rw http.ResponseWriter, req *http.Request) {
c.providers[LOGGER].(Loggable).Info("[%s] %s", req.Method, req.URL.Path)
fn(rw, req)
}
c.providers[ROUTER].(Routable).Get(path, nfn)
}
答案很简单:你没有。至少在那个地方没有 如果调用函数fn,则变量rw和req具有第一意义。或者调用fn的函数,该函数可能包含rw和req变量 在您的情况下,它可能是appContainer使用配置的路由的地方 为了更好地理解中间件概念的工作原理,可以在这里找到一个简单的示例:
您可能希望向下滚动以介绍函数文本和闭包好答案。我还建议OP看看-看起来他们目前正在对抗谷物。如果为了编写HTTP中间件而不得不进行反思,那么可能会出现一些问题!谢谢你的回复,亚当!我编辑了我的原始问题,以展示我最终是如何实现它的。