如何使用 Gorilla Mux 进行 URL 匹配?
How to use Gorilla Mux for URL matching?
我有一个验证器函数来检查给定路径是否与路径数组中的路径匹配。
当前逻辑:
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 回购说 "HTTP router and URL matcher"。但是,没有关于如何使用它进行 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
我有一个验证器函数来检查给定路径是否与路径数组中的路径匹配。
当前逻辑:
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 回购说 "HTTP router and URL matcher"。但是,没有关于如何使用它进行 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