为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 Go 中的所有请求创建一个通用函数?

如何为 Go 中的所有请求创建一个通用函数?

Go
萧十郎 2021-11-15 15:50:46
我正在用 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))


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信