猿问

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

我正在用 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 方法的签名。有什么方法可以添加一个函数来生成导航栏,而无需更改任何现有方法的签名?


有什么好的方法可以做到(即使改变现有方法)?


萧十郎
浏览 185回答 1
1回答

HUH函数

在 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))
随时随地看视频慕课网APP

相关分类

Go
我要回答