Интерфейс http.Handler
Интерфейс http.Handler является центральным механизмом обработки
HTTP-запросов в пакете net/http. Он определяет единственный метод
ServeHTTP, который принимает два параметра: запись ответа
http.ResponseWriter и указатель на запрос *http.Request.
Любая структура, реализующая этот метод, может выступать в роли
обработчика HTTP-запросов.
Синтаксис
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
Пример
Давайте создадим простую структуру myHandler, которая
реализует интерфейс http.Handler и обрабатывает запросы:
package main
import (
"fmt"
"net/http"
)
type myHandler struct{}
func (h myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
handler := myHandler{}
http.ListenAndServe(":8080", handler)
}
Результат выполнения кода при обращении к http://localhost:8080:
"Hello, World!"
Пример
В этом примере обработчик анализирует путь запроса и возвращает разный ответ в зависимости от URL:
package main
import (
"fmt"
"net/http"
)
type routeHandler struct{}
func (h routeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path {
case "/":
fmt.Fprintf(w, "Home page")
case "/about":
fmt.Fprintf(w, "About page")
default:
http.NotFound(w, r)
}
}
func main() {
handler := routeHandler{}
http.ListenAndServe(":8080", handler)
}
Результат выполнения кода при обращении к разным путям:
"Home page" // при запросе /
"About page" // при запросе /about
Пример
Интерфейс http.Handler также может быть реализован с помощью
функции-обработчика через тип http.HandlerFunc. Это удобный
способ превратить обычную функцию в обработчик:
package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello from HandlerFunc")
}
func main() {
handler := http.HandlerFunc(helloHandler)
http.ListenAndServe(":8080", handler)
}
Результат выполнения кода при обращении к http://localhost:8080:
"Hello from HandlerFunc"
Смотрите также
-
тип
http.HandlerFunc,
который позволяет использовать функции как обработчики -
мультиплексор
http.ServeMux,
который маршрутизирует запросы к разным обработчикам -
функцию
http.Handle,
которая регистрирует обработчик в глобальном мультиплексоре -
интерфейс
http.ResponseWriter,
который используется для формирования HTTP-ответа