0

我正在尝试使用 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}我该如何解决?

4

1 回答 1

2

我认为这是因为括号表示捕获组和产量子匹配。它会干扰大猩猩匹配器。试试不带括号。

router.HandleFunc("/{adapter:s3|onedrive}/{schema:[a-z]+}/check",
于 2016-03-23T20:18:09.637 回答