Тип http.HandlerFunc

Тип http.HandlerFunc из пакета net/http представляет собой функциональный тип, который реализует интерфейс http.Handler. Он позволяет использовать обычные функции с сигнатурой func(ResponseWriter, *Request) в качестве обработчиков HTTP-запросов. В первый параметр функция принимает интерфейс http.ResponseWriter для формирования ответа, во второй параметр - указатель на структуру http.Request, содержащую информацию о входящем запросе.

Синтаксис

gohttp.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  // обработка запроса
})

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
  })

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

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    switch r.URL.Path {
    case "/":
      fmt.Fprintln(w, "Home page")
    case "/about":
      fmt.Fprintln(w, "About page")
    default:
      w.WriteHeader(http.StatusNotFound)
      fmt.Fprintln(w, "Page not found")
    }
  })

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

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case http.MethodGet:
      fmt.Fprintln(w, "GET request handled")
    case http.MethodPost:
      fmt.Fprintln(w, "POST request handled")
    default:
      w.WriteHeader(http.StatusMethodNotAllowed)
      fmt.Fprintln(w, "Method not allowed")
    }
  })

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

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

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