Переменная http.DefaultServeMux

Переменная http.DefaultServeMux является экземпляром http.ServeMux, который создается автоматически при импорте пакета net/http. Она используется как маршрутизатор по умолчанию для функций http.ListenAndServe и http.ListenAndServeTLS, когда им не передан собственный маршрутизатор. Через эту переменную можно регистрировать обработчики для различных HTTP-путей.

Синтаксис

gohttp.DefaultServeMux

Пример

Давайте зарегистрируем обработчик для пути "/hello" с помощью метода HandleFunc:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
  })

  http.ListenAndServe(":8080", nil)
}

В этом примере мы регистрируем функцию-обработчик для пути "/hello" через глобальную функцию http.HandleFunc, которая работает с http.DefaultServeMux. При запуске сервера с параметром nil используется стандартный маршрутизатор. После запуска сервера при обращении к http://localhost:8080/hello будет выведено сообщение "Hello, World!".

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  mux := http.DefaultServeMux

  mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Main page")
  })

  mux.HandleFunc("/about", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About page")
  })

  server := &http.Server{
    Addr:  ":8080",
    Handler: mux,
  }

  server.ListenAndServe()
}

В этом примере мы явно получаем ссылку на http.DefaultServeMux и регистрируем на нем обработчики для двух путей. Затем создаем собственный экземпляр http.Server и передаем ему стандартный маршрутизатор в качестве обработчика. Этот подход полезен, когда требуется более тонкая настройка сервера.

Пример

Давайте создадим обработчик, который будет возвращать информацию о запросе, используя http.DefaultServeMux:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/info", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Method: %s\n", r.Method)
    fmt.Fprintf(w, "URL: %s\n", r.URL.Path)
    fmt.Fprintf(w, "User-Agent: %s\n", r.UserAgent())
  })

  http.ListenAndServe(":8080", nil)
}

Результат выполнения при обращении к http://localhost:8080/info:

go"Method: GET"
"URL: /info"
"User-Agent: curl/7.68.0"

В этом примере обработчик возвращает информацию о методе запроса, пути и заголовке User-Agent. При обращении к серверу с помощью curl будет выведена подобная информация.

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

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