如何获取在 GO 中的 func() 参数中传递的参数值?
How do I get the values of arguments passed inside a func() argument in GO?
我正在尝试在路由中创建中间件,想知道如何获取在 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, fn)
}
我查看了反射文档,但我不太清楚,或者也许有更简单的方法?
已编辑(解决方案)
事实证明不需要反思,正如 Adam 在对此 post 的回复中以及 Jason 在 his golang-nuts reply 我的问题中所建议的那样。
想法是创建一个新的匿名函数,然后在调用原始函数之前为 modification/enhancement 拦截传递给它的参数。
这就是我最终所做的,它就像一个魅力,我正在 post 以防它帮助其他人:
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
使用配置的路由
为了更好地理解中间件概念的工作原理,可以在此处找到一个简单示例:https://golang.org/doc/articles/wiki/
您可能想向下滚动到 "Introducing Function Literals and Closures"
我正在尝试在路由中创建中间件,想知道如何获取在 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, fn)
}
我查看了反射文档,但我不太清楚,或者也许有更简单的方法?
已编辑(解决方案)
事实证明不需要反思,正如 Adam 在对此 post 的回复中以及 Jason 在 his golang-nuts reply 我的问题中所建议的那样。
想法是创建一个新的匿名函数,然后在调用原始函数之前为 modification/enhancement 拦截传递给它的参数。
这就是我最终所做的,它就像一个魅力,我正在 post 以防它帮助其他人:
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
使用配置的路由
为了更好地理解中间件概念的工作原理,可以在此处找到一个简单示例:https://golang.org/doc/articles/wiki/
您可能想向下滚动到 "Introducing Function Literals and Closures"