在我以前使用 DefaultServeMux 制作的 golang 应用程序中,如果我有一个这样的"/users/"路由,func user(name string)例如由 处理的路由,并且我向 发送了一个请求/users/jim,该请求仍将由该"/users/"路由处理。在我正在制作的当前应用程序中,我没有使用,DefaultServeMux而只是传递一个实现 ServeHTTP 的处理程序,然后打开请求 url。但是,现在,如果我向不完全匹配的路由发送请求,则不会调用处理程序函数。例如,如果我向 发送 post 请求"/api/jim",即使"/api"已处理,我也会收到 404 错误。
我想让我的应用程序保持原样(在处理程序中引用数据库),但也能够处理不完全匹配的路由。
问题:假设我可以创建一个新的 ServeMux 来处理不完全匹配的路由,但是我如何将它与具有对数据库连接的引用的类型 Handler Struct 组合起来?
type Handler struct{
DB *DB
}
func main() {
fmt.Println("Hello, playground")
db, err := sql.Open("postgres", dbinfo)
defer db.Close()
h := &Handler{
DB: db,
}
log.Fatal(http.ListenAndServe(":8888", h))
}
func (h *Handler)ServeHTTP(w http.ResponseWriter, r *http.Request){
switch r.URL.Path{
case "/":
h.serveRoot(w, r)
case "/api/":
h.apiRouter(w, r)
}
}
func (h *Handler)serveRoot(w http.ResponseWriter, r *http.Request){
h.DB.DoSomethingWithDB()
}
func (h *Handler)apiRouter(w http.ResponseWriter, r *http.Request){
switch r.URL.Path{
case "/":
h.serveRoot(w, r)
case "/api/":
h.apiRouter(w, r)
}
}
更新 由于与问题无关的原因,我不能使用 DefaultServeMux
ITMISS
相关分类