我试图将我的数据库对象传递给处理程序,而不是使用全局对象。但我不知道这是否可能,我正在使用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 的新手,请详细解释一下可能的答案。