gpt4 book ai didi

reflection - 如何获取在 GO 中的 func() 参数中传递的参数值?

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:03 29 4
gpt4 key购买 nike

我正在尝试在路由中创建中间件,想知道如何获取在 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)
}

我查看了反射文档,但我不清楚,或者也许有更简单的方法?

已编辑(解决方案)

事实证明不需要反射(reflection),正如 Adam 在对这篇文章的回复中以及 Jason 在 his golang-nuts reply 上所建议的那样我的问题。

想法是创建一个新的匿名函数,然后在调用原始函数之前拦截传递给它的参数以进行修改/增强。

这就是我最终所做的,它就像一个魅力,我发布它以防它帮助其他人:

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”

关于reflection - 如何获取在 GO 中的 func() 参数中传递的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175233/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com