如何使用Gorilla Mux进行URL匹配?

如何使用Gorilla Mux进行URL匹配?,go,routes,mux,Go,Routes,Mux,我有一个验证器函数来检查给定路径是否与路径数组中的路径匹配 当前逻辑: var allowed := String{"/users", "/teams"} func Validator(path String) bool { for _, p := range allowed { if path == p { return true } } return false } 我想用golang gorilla mux替换它,因为我可能有路径变量

我有一个验证器函数来检查给定路径是否与路径数组中的路径匹配

当前逻辑:

var allowed := String{"/users", "/teams"}
func Validator(path String) bool {
   for _, p := range allowed {
     if path == p {
        return true
     }
   }
   return false
}

我想用golang gorilla mux替换它,因为我可能有路径变量。mux的github repo称“HTTP路由器和URL匹配器”。但是,没有关于如何使用它进行URL匹配的示例。

下面是我如何通过代码解决它的:

// STEP 1: create a router
router := mux.NewRouter()

// STEP 2: register routes that are allowed
router.NewRoute().Path("/users/{id}").Methods("GET")
router.NewRoute().Path("/users").Methods("GET")
router.NewRoute().Path("/teams").Methods("GET")

routeMatch := mux.RouteMatch{}

// STEP 3: create a http.Request to use in Mux Route Matcher
url := url.URL { Path: "/users/1" }
request := http.Request{ Method:"GET", URL: &url }

// STEP 4: Mux's Router returns true/false
x := router.Match(&request, &routeMatch)
fmt.Println(x) // true

url = url.URL { Path: "/other-endpoint" }
request = http.Request{ Method:"GET", URL: &url }

x = router.Match(&request, &routeMatch)
fmt.Println(x) // false

url匹配是由路由器完成的,它是为了路由而不是验证。gorilla/mux没有为您的方便提供独立的匹配器。您可以使用mux.Router将http请求路由到特定的处理程序,也可以不使用。如果您只需要一个验证器,而不是路由器,那么就不要使用gorilla/mux。这是否回答了您的问题@SahithVibudhi说,如果你仍然想使用gorilla/mux(请不要),那么看看这个方法,正如你所看到的,因为这是一个http请求路由器,所以参数必须是一个http请求,所以如果你想使用它,你需要将你想要验证的路径转换成一个请求。我用类似的方法解决了这个问题。我必须验证像
/users/{id}
这样的路径,以检查开发人员令牌是否可以访问该端点。我想重新使用mux的“URL匹配器”,而不是重写逻辑。因为它附带了一个。@ifnotak这并不能解决问题。我补充了答案。