我正在用 Go 编写一个 Web 应用程序,以便更好地使用它。我的用例非常简单。我想要一个通用函数,它将为每个请求执行,并根据用户状态生成导航栏。init 方法看起来像(也会让你了解我的处理程序方法的实现):func init() { initDB() gob.Register(user.User{}) r := mux.NewRouter() r.HandleFunc("/", handleHome) http.Handle("/", r)}我正在使用以下方法来执行模板。func executeTemplate(w http.ResponseWriter, name string, status int, data map[string]interface{}) error { w.Header().Set("Content-Type", "text/html; charset=utf-8") w.WriteHeader(status) data["User"] = getUser(r) return tpls[name].ExecuteTemplate(w, "base", data)}我正在使用 Gorilla 工具包来存储会话,但据我所知,我每次都需要 http.Request 实例来访问 cookie 存储。现在我不想更改 executeTemplate 方法的签名。有什么方法可以添加一个函数来生成导航栏,而无需更改任何现有方法的签名?有什么好的方法可以做到(即使改变现有方法)?
1 回答
HUH函数
TA贡献1836条经验 获得超4个赞
在 Gorillatoolkit 中创建中间件的基本常见方法是包装顶级多路复用器。就像是
func Middleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
//You do something here using request
h.ServeHTTP(w, r)
})
}
进而
r := mux.NewRouter()
r.HandleFunc("/", handleHome)
http.Handle("/", Middleware(r))
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消