gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:19 27 4
gpt4 key购买 nike

我正在尝试使用 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} 变量的值,我该如何解决这个问题?

最佳答案

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

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

关于go - 如何在 Gorilla mux 路由中获取 OR 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com