Go 如何实施子路由

Go 如何实施子路由,go,gorilla,Go,Gorilla,我想实现这样的路线 user/profile user/cart 用户/产品 目前,我正在这样做 r.HandleFunc("user/signup", signupHandler).Methods("POST") r.HandleFunc("user/signin", signinHandler).Methods("POST") r.HandleFunc("user/profile", profileHandler).Methods("GET") r.HandleFunc("user/cart

我想实现这样的路线

user/profile

user/cart

用户/产品

目前,我正在这样做

r.HandleFunc("user/signup", signupHandler).Methods("POST")
r.HandleFunc("user/signin", signinHandler).Methods("POST")
r.HandleFunc("user/profile", profileHandler).Methods("GET")
r.HandleFunc("user/cart", cartHandler).Methods("POST")
r.HandleFunc("user/products", productsHandler).Methods("GET")
正如您所看到的,这些路由以
user
开始,因此我如何知道它是
user
路由,以便在不同的文件中发送和处理它

我想要像这样的东西

r.HandleFunc("user/", handlerWhichHandelAllTheRequestFromUser)
它应该处理从
用户
开始的所有URL


我正在使用mux gorilla

mux中有一个PathPrefix函数。在这种情况下,您可以使用它来设置路径前缀,即“/user”

示例:-

userHandler.go

func makeUserHandler()http.Handler{
  //Define all you handlers here
  r := mux.NewRouter()
  r.HandleFunc("user/signup", signupHandler).Methods("POST")
  r.HandleFunc("user/signin", signinHandler).Methods("POST")
  r.HandleFunc("user/profile", profileHandler).Methods("GET")
  r.HandleFunc("user/cart", cartHandler).Methods("POST")
  r.HandleFunc("user/products", productsHandler).Methods("GET")
  return r
}
梅因,加油

r := mux.NewRouter()
r.PathPrefix("/user").Handler(makeUserHandler())

请根据您的要求对上述代码进行必要的更改。

您可以在mux路由中使用正则表达式:
s.HandleFunc(“/articles/{category}/{id:[0-9]+}”,ArticleHandler)
如果这是gorilla/mux,您可以使用子计算机:
userRouter:=r.Path(“/user”).subrouter()
。是的<代码>大猩猩/mux谢谢!如果它是
net/http
,那么您发布的代码将完全按照预期工作。stdlib路由器将带有尾随斜杠的路由视为前缀处理程序。那么我如何知道它是哪一个呢?它是
注册
或在
makeUserHandler
中“登录”?当前缀路径在main.go中匹配时,它将转发到makeUserHandler路由器。从那里,路由器将匹配其路径,即“/signup”或“/signin”,并调用相应的处理程序,即signupHandler或signinHandler。