如何在 Gorilla mux 路由中获取 OR 模式
How to get OR pattern in Gorilla mux routing
我正在尝试使用 Gorilla mux 路由器来处理响应 URL 中有限字符串列表的路径。我正在开发的服务将从调用者处获取文件并通过 "adapter" 将它们发送到 S3 或 OneDrive,具体取决于 URL 中指定的 "adapter"。我还需要一个名为 "schema" 的变量,我现在只提到它是因为接下来会很奇怪。我的测试如下({schema}将被设置为"test"):
router.HandleFunc("/{adapter:(s3|onedrive)}/{schema:[a-z]+}/check",
func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(fmt.Sprintf(`{"a":"%s","s":"%s"}`,
mux.Vars(r)["adapter"], mux.Vars(r)["schema"])))
}).Methods("GET")
我希望去 /s3/test/check
会产生 {"a":"s3","s":"test"}
就像去 /onedrive/test/check
应该产生 {"a":"onedrive","s":"test"}
... 但是在这些情况下我得到 {"a":"s3","s":"s3"}
和 {"a":"onedrive","s":"onedrive"}
分别。
(s3|onedrive)
检查似乎是强制执行的,因为例如,尝试正确转到 /dropbox/test/check
会产生 404。
为什么 {schema}
变量获取 {adapter}
变量的值,我该如何解决这个问题?
我认为这是因为括号表示捕获组和产生子匹配。它可以干扰大猩猩匹配器。不加括号就试试。
router.HandleFunc("/{adapter:s3|onedrive}/{schema:[a-z]+}/check",
我正在尝试使用 Gorilla mux 路由器来处理响应 URL 中有限字符串列表的路径。我正在开发的服务将从调用者处获取文件并通过 "adapter" 将它们发送到 S3 或 OneDrive,具体取决于 URL 中指定的 "adapter"。我还需要一个名为 "schema" 的变量,我现在只提到它是因为接下来会很奇怪。我的测试如下({schema}将被设置为"test"):
router.HandleFunc("/{adapter:(s3|onedrive)}/{schema:[a-z]+}/check",
func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(fmt.Sprintf(`{"a":"%s","s":"%s"}`,
mux.Vars(r)["adapter"], mux.Vars(r)["schema"])))
}).Methods("GET")
我希望去 /s3/test/check
会产生 {"a":"s3","s":"test"}
就像去 /onedrive/test/check
应该产生 {"a":"onedrive","s":"test"}
... 但是在这些情况下我得到 {"a":"s3","s":"s3"}
和 {"a":"onedrive","s":"onedrive"}
分别。
(s3|onedrive)
检查似乎是强制执行的,因为例如,尝试正确转到 /dropbox/test/check
会产生 404。
为什么 {schema}
变量获取 {adapter}
变量的值,我该如何解决这个问题?
我认为这是因为括号表示捕获组和产生子匹配。它可以干扰大猩猩匹配器。不加括号就试试。
router.HandleFunc("/{adapter:s3|onedrive}/{schema:[a-z]+}/check",