为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁星淼淼 2021-12-27 15:54:43
我正在尝试使用 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 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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

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


查看完整回答
反对 回复 2021-12-27
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信