РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1045 of 1593 menu

Функция http.StripPrefix

Функция http.StripPrefix возвращает обработчик, который удаляет заданный префикс из URL-пути запроса перед передачей управления другому обработчику. В первый параметр передается строка с префиксом для удаления, во второй параметр передается обработчик типа http.Handler, который получит запрос с измененным путем.

Синтаксис

http.StripPrefix(prefix string, handler http.Handler) http.Handler

Пример

Давайте создадим простой HTTP-сервер, который использует http.StripPrefix для удаления префикса "/static" из URL-пути, чтобы файлы отдавались из директории "./files":

package main import ( "net/http" ) func main() { // Создаем файловый сервер для директории ./files fs := http.FileServer(http.Dir("./files")) // Удаляем префикс /static из URL-пути handler := http.StripPrefix("/static", fs) // Обрабатываем все запросы к /static/ http.Handle("/static/", handler) // Запускаем сервер http.ListenAndServe(":8080", nil) }

После запуска сервера запрос к http://localhost:8080/static/style.css будет преобразован в /style.css и файл будет искаться в директории ./files/style.css.

Пример

Давайте создадим обработчик, который выводит измененный URL-путь после удаления префикса:

package main import ( "fmt" "net/http" ) func main() { // Создаем обработчик, который выводит путь запроса originalHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Путь запроса: %s", r.URL.Path) }) // Удаляем префикс /api из URL-пути handler := http.StripPrefix("/api", originalHandler) // Обрабатываем все запросы к /api/ http.Handle("/api/", handler) // Запускаем сервер http.ListenAndServe(":8080", nil) }

При запросе к http://localhost:8080/api/users/123 обработчик получит путь /users/123 и выведет:

"Путь запроса: /users/123"

Пример

Давайте рассмотрим пример с несколькими вложенными обработчиками, где мы удаляем префикс для API-эндпоинтов:

package main import ( "encoding/json" "net/http" ) type Message struct { Text string `json:"text"` } func main() { // Создаем обработчик для API apiHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { msg := Message{Text: "Привет от API"} w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(msg) }) // Удаляем префикс /v1 из URL-пути handler := http.StripPrefix("/v1", apiHandler) // Обрабатываем все запросы к /v1/ http.Handle("/v1/", handler) // Запускаем сервер http.ListenAndServe(":8080", nil) }

Запрос к http://localhost:8080/v1/message будет передан обработчику с путем /message, который вернет JSON-ответ:

{"text":"Привет от API"}

Смотрите также

  • функцию http.FileServer,
    которая создает обработчик для раздачи статических файлов
  • функцию http.ServeFile,
    которая отдает один файл в ответ на HTTP-запрос
  • функцию http.Handle,
    которая регистрирует обработчик для определенного пути
  • функцию http.HandleFunc,
    которая регистрирует функцию-обработчик для определенного пути
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить