【发布时间】:2014-11-30 11:02:53
【问题描述】:
我试图将我的数据库对象传递给我的处理程序,而不是拥有一个全局对象。但我不知道这是否可能,我正在使用 Gorilla Mux 包,我可以看到它需要一个闭包作为第二个参数。
// https://github.com/gorilla/mux/blob/master/mux.go#L174
// HandleFunc registers a new route with a matcher for the URL path.
// See Route.Path() and Route.HandlerFunc().
func (r *Router) HandleFunc(path string, f func(http.ResponseWriter,
*http.Request)) *Route {
return r.NewRoute().Path(path).HandlerFunc(f)
}
然后定义我可以使用的参数,理想情况下我希望有第三个这样的参数。
// In my main
router.HandleFunc("/users/{id}", showUserHandler).Methods("GET")
func showUserHandler(w http.ResponseWriter, r *http.Request, db *gorm.DB) {
fmt.Fprintf(w, "We should fetch the user with id %s", vars["id"])
}
有解决方法吗?还是我需要一个全局 db 对象?我是 Go 新手,所以请详细解释一个可能的答案。
【问题讨论】:
-
stackoverflow.com/a/26106655/6309 也可以给你一些想法。
-
@VonC 我实际上尝试了simonsdotnet.wordpress.com/2014/09/06/…,但发现它不适用于 Gorilla,因为 http 包只需要 ServeHTTP,但 Gorilla 需要具有特定参数的 func。我可能错了。