Как подредактировать URL ДО его попадания в функцию http.FileServer()?

Чтобы отредактировать URL перед передачей его в функцию http.FileServer() в Go, вам потребуется создать свой собственный обработчик middleware или использовать существующую библиотеку для этой цели, например, gorilla/mux.

1. Если вы хотите создать свой собственный обработчик middleware, следуйте следующим шагам:

a. Создайте функцию-обработчик, которая принимает http.Handler и возвращает http.Handler. Например:

      func customMiddleware(next http.Handler) http.Handler {
          return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
              // Здесь вы можете отредактировать URL, например, добавить префикс или параметры запроса
              // или выполнить любые другие манипуляции с URL.
  
              // Вызовите следующий middleware или обработчик
              next.ServeHTTP(w, r)
          })
      }

b. Создайте экземпляр http.FileServer и добавьте его в свои обработчики middleware. Например:

      fileServer := http.FileServer(http.Dir("static"))

      // Создайте новый экземпляр Router  и добавьте маршрут, используя ваш middleware.
      router := http.NewServeMux()
      router.Handle("/", customMiddleware(fileServer))

      // Запустите сервер
      http.ListenAndServe(":8000", router)

Теперь каждый запрос к серверу будет проходить через ваш обработчик middleware, где вы можете отредактировать URL перед передачей его в fileServer.

2. Если вы хотите использовать библиотеку gorilla/mux, следуйте следующим шагам:

a. Установите библиотеку gorilla/mux, если ее у вас нет, введите следующую команду:

      go get -u github.com/gorilla/mux

b. Импортируйте библиотеку в свой файл:

      import (
          "github.com/gorilla/mux"
      )

c. Создайте экземпляр Router и добавьте маршрут с обработчиком функцией, где вы можете отредактировать URL. Например:

      router := mux.NewRouter()
      router.HandleFunc("/static/{file}", func(w http.ResponseWriter, r *http.Request) {
          // Здесь вы можете отредактировать URL перед передачей его в fileServer
          
          // Получите значение параметра file из URL
          file := mux.Vars(r)["file"]

          // Соберите путь к файлу с помощью полученного параметра
          filePath := filepath.Join("static", file)

          // Передайте путь к файлу в http.FileServer
          http.FileServer(http.Dir(filePath)).ServeHTTP(w, r)
      })

      // Запустите сервер
      http.ListenAndServe(":8000", router)

Теперь каждый запрос с маршрутом "/static/{file}" будет проходить через ваш обработчик функцию, где вы можете отредактировать URL перед передачей его в fileServer.

В любом случае, создание собственного middleware или использование библиотеки gorilla/mux позволит вам отредактировать URL перед передачей его в http.FileServer в Go.