假设我有以下init函数路由请求。
func init() {
http.HandleFunc("/user", handler1)
http.HandleFunc("/user/profile", handler2)
http.HandleFunc("/user/post", handler3)
....
....
}
所有这些都要求我有用户的配置文件。
我知道我可以
func handler1(w http.ResponseWriter, r *http.Request) {
getUserdata()
//Actual handler code
...
...
}
但是,有没有一种方法,我可以得到数据,而不把函数调用在每个处理程序?这是Go想让你做的事情吗?
您有两个选择。
- 可以实现
http.Handler
接口 - 你用包装器HandleFunc包装所有的
http.HandlerFunc
。
因为看起来您想要一些简单的东西,所以我将演示WRapper
func Prehook(f http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
getUserData()
f(w, r)
}
}
func init() {
// use getUserData() call before your handler
http.HandleFunc("/user", Prehook(handler1))
// Don't use getUserData call before your handler
http.HandleFunc("/user/profile", handler2)
}