Я пытаюсь использовать маршрутизатор-маршрутизатор Gorilla для обработки путей, которые отвечают на ограниченный список строк в URL-адресе. Служба, которую я разрабатываю, будет принимать файлы от вызывающего и передавать их через «адаптер», который отправляет их на S3 или OneDrive, в зависимости от «адаптера», указанного в URL-адресе. Мне также нужна переменная с именем «schema», о которой я упоминаю сейчас только из-за странности, которая следует. Мой тест выглядит следующим образом ({схема} будет установлен на «тест»):Как получить шаблон OR в маршрутизации маршрутизации Gorilla
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}
и как я могу это исправить?