URL 内の限られた文字列リストに応答するパスを処理するために、Gorilla mux ルーターを使用しようとしています。私が開発しているサービスは、呼び出し元からファイルを取得し、URL で指定された「アダプター」に応じて、S3 または OneDrive に送信する「アダプター」を介してそれらを渡します。また、"schema" という名前の変数も必要です。私のテストは次のとおりです({schema}は「テスト」に設定されます):
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}
ですか?どうすれば修正できますか?