如何使用gorilla mux创建带有可选url var的路由?

adr*_*edx 5 go mux

我想在路线中有一个可选的URL变量.我似乎找不到使用mux包的方法.这是我目前的路线:

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/view/{id:[0-9]+}", MakeHandler(ViewHandler))
    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理是网址localhost:8080/view/1.我希望它接受,即使没有,id所以如果我输入localhost:8080/view它仍然会工作.思考?

Kyl*_*ons 7

使用您想要的路径第二次注册处理程序:

r.HandleFunc("/view", MakeHandler(ViewHandler))
Run Code Online (Sandbox Code Playgroud)

只需确保在获得您检查此案例的变量时:

vars := mux.Vars(r)
id, ok := vars["id"]
if !ok {
  // directory listing
  return
}
// specific view
Run Code Online (Sandbox Code Playgroud)


Int*_*net 5

您可以HandleFunc为根/view路径定义一个新的:

r.HandleFunc("/view", MakeHandler(RootHandler))
Run Code Online (Sandbox Code Playgroud)

并让该RootHandler函数执行该路径所需的任何操作。