Переменная http.DefaultServeMux
Переменная http.DefaultServeMux является экземпляром
http.ServeMux, который создается автоматически
при импорте пакета net/http. Она используется
как маршрутизатор по умолчанию для функций
http.ListenAndServe и
http.ListenAndServeTLS, когда им не передан
собственный маршрутизатор. Через эту переменную можно
регистрировать обработчики для различных HTTP-путей.
Синтаксис
http.DefaultServeMux
Пример
Давайте зарегистрируем обработчик для пути "/hello"
с помощью метода HandleFunc:
package 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:
package 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:
package 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:
"Method: GET"
"URL: /info"
"User-Agent: curl/7.68.0"
В этом примере обработчик возвращает информацию о методе запроса, пути и заголовке User-Agent. При обращении к серверу с помощью curl будет выведена подобная информация.
Смотрите также
-
функцию
http.ListenAndServe,
которая запускает HTTP-сервер с использованием стандартного маршрутизатора -
функцию
http.HandleFunc,
которая регистрирует обработчик для пути на стандартном маршрутизаторе -
тип
http.ServeMux,
который представляет собой маршрутизатор HTTP-запросов -
функцию
http.NewServeMux,
которая создает новый экземпляр маршрутизатора