Метод http.ServeMux.Handle

Метод ServeMux.Handle регистрирует обработчик для заданного маршрута в мультиплексоре HTTP-запросов. В первый параметр метод принимает строку с шаблоном пути (pattern), во второй — обработчик, реализующий интерфейс http.Handler. Обработчик будет вызываться для всех входящих запросов, чей URL соответствует зарегистрированному шаблону.

Синтаксис

gofunc (mux *ServeMux) Handle(pattern string, handler http.Handler)

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

type HelloHandler struct{}

func (h HelloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello, World!")
}

func main() {
  mux := http.NewServeMux()
  mux.Handle("/hello", HelloHandler{})

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

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  mux := http.NewServeMux()

  mux.Handle("/user", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "User page")
  }))

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

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

type RootHandler struct{}

func (h RootHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Root path: %s", r.URL.Path)
}

func main() {
  mux := http.NewServeMux()
  mux.Handle("/", RootHandler{})

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

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

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