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

Метод http.ServeMux.ServeHTTP

Метод http.ServeMux.ServeHTTP реализует интерфейс http.Handler и обрабатывает HTTP-запросы, направляя их к зарегистрированным обработчикам. Первым параметром метод принимает http.ResponseWriter для формирования ответа, вторым — указатель на http.Request с данными запроса.

Метод автоматически выбирает подходящий обработчик на основе пути запроса, используя правила сопоставления, зарегистрированные через методы Handle и HandleFunc. Если обработчик не найден, возвращается ответ с кодом состояния 404.

Синтаксис

func (mux *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request)

Пример

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

package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Main page") }) mux.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello world!") }) server := &http.Server{ Addr: ":8080", Handler: mux, } fmt.Println("Server started on port 8080") server.ListenAndServe() }

Результат выполнения кода при обращении к разным путям:

"Main page" "Hello world!"

Пример

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

package main import ( "fmt" "net/http" "strings" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/user/", func(w http.ResponseWriter, r *http.Request) { path := strings.TrimPrefix(r.URL.Path, "/user/") if path == "" { fmt.Fprintln(w, "User ID is empty") return } fmt.Fprintf(w, "User ID: %s\n", path) }) mux.HandleFunc("/api/v1/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "API v1 endpoint: %s\n", r.URL.Path) }) server := &http.Server{ Addr: ":8080", Handler: mux, } fmt.Println("Server started on port 8080") server.ListenAndServe() }

Результат выполнения кода при обращении к различным URL:

"User ID is empty" "User ID: 12345" "API v1 endpoint: /api/v1/data"

Пример

Давайте рассмотрим обработку запросов с различными методами HTTP:

package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/resource", func(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: fmt.Fprintln(w, "GET request - read resource") case http.MethodPost: fmt.Fprintln(w, "POST request - create resource") case http.MethodPut: fmt.Fprintln(w, "PUT request - update resource") case http.MethodDelete: fmt.Fprintln(w, "DELETE request - remove resource") default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } }) server := &http.Server{ Addr: ":8080", Handler: mux, } fmt.Println("Server started on port 8080") server.ListenAndServe() }

Результат выполнения кода при различных HTTP-методах:

"GET request - read resource" "POST request - create resource" "PUT request - update resource" "DELETE request - remove resource"

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

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