如何获取在 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 被调用,变量 rwreq 首先有意义。 (或调用 fn 的函数,可能会有 rwreq 变量)

在你的情况下,可能是 appContainer 使用配置的路由

为了更好地理解中间件概念的工作原理,可以在此处找到一个简单示例:https://golang.org/doc/articles/wiki/

您可能想向下滚动到 "Introducing Function Literals and Closures"