将上下文传递给子目录

时间:2015-05-27 16:18:11

标签: go

我有一个Context结构用于应用程序上下文。 ConfigureRouter函数接收上下文作为参数并设置全局变量c,以便同一文件中的中间件可以使用它。

var c *core.Context

func ConfigureRouter(ctx *core.Context, router *httprouter.Router) {
    c = ctx //make context available in all middleware
    router.POST("/v1/tokens/create", token.Create) //using httprouter
}

上面列出的一条路由调用token.Create(来自令牌包,这是一个子目录),但它也需要上下文。

//token/token.go
func Create(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
    //Help! I need the context to do things
}

如何将上下文传递给令牌包?

1 个答案:

答案 0 :(得分:1)

您可以将Create函数重新定义为返回处理函数的函数:

func Create(ctx *core.Context) httprouter.Handle {
    return func(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
        // Now you have the context to do things
    }
}

httprouter.Handle是由httprouter定义为type Handle func(http.ResponseWriter, *http.Request, Params)的func类型。

然后你会在ConfigureRouter

中使用它
func ConfigureRouter(ctx *core.Context, router *httprouter.Router) {
    router.POST("/v1/tokens/create", token.Create(ctx))
}