我正在尝试使用 Gorilla mux 路由器来处理响应 URL 中有限的字符串列表的路径。我正在开发的服务将从调用者那里获取文件,并通过“适配器”将它们发送到 S3 或 OneDrive,具体取决于 URL 中指定的“适配器”。我还需要一个名为“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")
我希望 go to/s3/test/check
会产生{"a":"s3","s":"test"}
就像 going to/onedrive/test/check
应该产生一样{"a":"onedrive","s":"test"}
......但是在这些情况下,我分别得到{"a":"s3","s":"s3"}
和{"a":"onedrive","s":"onedrive"}
。
检查似乎是强制执行的(s3|onedrive)
,例如,尝试/dropbox/test/check
正确转到会产生 404。
为什么{schema}
变量会获取变量的值,{adapter}
我该如何解决?