如何在Gorilla mux路由中获得OR模式

时间:2016-03-23 18:07:14

标签: go gorilla mux

我尝试使用Gorilla mux路由器来处理响应URL中有限字符串列表的路径。我正在开发的服务将从调用者那里获取文件并通过"适配器"将它们发送到S3或OneDrive,具体取决于"适配器"在URL中指定。我还需要一个名为" schema"的变量,我现在只提到它,因为后面的怪异。我的测试如下({schema}将设置为" test"):

/s3/test/check

我希望转到{"a":"s3","s":"test"}会产生/onedrive/test/check,因为转到{"a":"onedrive","s":"test"}会产生{"a":"s3","s":"s3"} ...但是在这些情况下,我得到{{1}分别和{"a":"onedrive","s":"onedrive"}

(s3|onedrive)检查似乎是强制执行的,因为,例如,尝试转到/dropbox/test/check会正确生成404。

为什么{schema}变量获取{adapter}变量的值,我该如何解决?

1 个答案:

答案 0 :(得分:2)

我认为这是因为括号表示捕获组和产生子匹配。它可以干扰大猩猩匹配。试试不加括号。

router.HandleFunc("/{adapter:s3|onedrive}/{schema:[a-z]+}/check",