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

Posted

技术标签:

【中文标题】如何在 Gorilla mux 路由中获取 OR 模式【英文标题】:How to get OR pattern in Gorilla mux routing 【发布时间】:2016-03-23 18:07:14 【问题描述】:

我正在尝试使用 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")

我希望转到/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 变量的值,我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于如何在 Gorilla mux 路由中获取 OR 模式的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别