Как получить шаблон ИЛИ в Gorilla MUX Routing
Я пытаюсь использовать маршрутизатор muilla Gorilla для обработки путей, которые отвечают на ограниченный список строк в URL. Разрабатываемая мной служба будет принимать файлы от вызывающей стороны и передавать их через "адаптер", который отправляет их на S3 или OneDrive, в зависимости от "адаптера", указанного в URL-адресе. Мне также требуется переменная с именем "схема", о которой я сейчас упоминаю только из-за странностей, которые следуют. Мой тест выглядит следующим образом ({схема} будет установлена на "тест"):
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",