gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:59:16 26 4
gpt4 key购买 nike

我正在使用 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 工具包来存储 session ,但据我所知,我每次都需要 http.Request 实例来访问 cookie 存储。现在我不想更改 executeTemplate 方法的签名。有什么方法可以添加一个函数来生成导航栏而不更改任何现有方法的签名?

有哪些好的方法(即使改变现有方法)?

最佳答案

在 Gorillatoolkit 中创建中间件的基本常用方法是包装顶级 mux。有点像

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))

关于go - 如何为 Go 中的所有请求创建一个通用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053361/

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