С https://golang.org/pkg/net/http/#ServeMux:
Исправлено имя шаблона, корневые пути, такие как "/favicon.ico" или root
поддеревья, например "/ images /" (обратите внимание на косую черту) .
Это означает, что /max
, который является фиксированным корневым путем , будет соответствовать только /max
, а шаблон /max/
, который является корневым поддеревом , будет соответствовать /max/
, любой другой путь, начинающийся с /max/
, и по умолчанию он также будет соответствовать /max
.
http.Handle("/max/", http.FileServer(http.Dir(".")))
В зависимости от расположения вашего каталога .
может потребоваться использовать https://golang.org/pkg/net/http/#StripPrefix.
Допустим, ваш каталог содержит два файла:
.
├── foo.txt
└── max
└── bar.txt
Учитывая вышеописанный обработчик, запрос к /max/bar.txt
вернет файл bar.txt
, но запрос к /max/foo.txt
или /foo.txt
вернет 404
, файла нет.
Таким образом, если вы хотите обслуживать файлы из пути /max/
, но в вашем каталоге .
нет подкаталога max
, вы можете использовать StripPrefix
для удаления префикса /max
из путь URL запроса до его передачи на FileServer
.
http.Handle("/max/", http.StripPrefix("/max/", http.FileServer(http.Dir("."))))
Для обработки PUT
запросов по одному и тому же маршруту вам нужен пользовательский обработчик.
type myhandler struct {
fs http.Handler
}
func (h myhandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.Method != "PUT" {
// business as usual
h.fs.ServeHTTP(w, r)
return
}
// handle PUT
// ...
}
А затем, чтобы зарегистрировать его, выполните:
fs := http.StripPrefix("/max/", http.FileServer(http.Dir(".")))
http.Handle("/max/", myhandler{fs: fs})