Метод http.ServeMux.HandleFunc

Метод http.ServeMux.HandleFunc регистрирует функцию-обработчик для конкретного HTTP маршрута в мультиплексоре. Первым параметром метод принимает строку с шаблоном маршрута, вторым - функцию-обработчик с сигнатурой func(http.ResponseWriter, *http.Request). Этот метод является альтернативой глобальной функции http.HandleFunc и позволяет более гибко управлять маршрутизацией.

Синтаксис

goserveMux.HandleFunc(pattern string, handler func(ResponseWriter, *Request))

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

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

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

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

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

go"Hello, World!"

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

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

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

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

  mux.HandleFunc("/contact", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Contact Page")
  })

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

Результат выполнения кода при запросе к http://localhost:8080/about:

go"About Page"

Пример

Давайте используем именованную функцию вместо анонимной:

gopackage main

import (
  "fmt"
  "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello from named handler")
}

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

  mux.HandleFunc("/hello", helloHandler)

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

Результат выполнения кода при запросе к http://localhost:8080/hello:

go"Hello from named handler"

Пример

Давайте зарегистрируем обработчик, который обрабатывает параметры запроса:

gopackage main

import (
  "fmt"
  "net/http"
)

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

  mux.HandleFunc("/greet", func(w http.ResponseWriter, r *http.Request) {
    name := r.URL.Query().Get("name")
    if name == "" {
      name = "Guest"
    }
    fmt.Fprintf(w, "Hello, %s!", name)
  })

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

Результат выполнения кода при запросе к http://localhost:8080/greet?name=John:

go"Hello, John!"

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

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