Функция http.HandleFunc

Функция http.HandleFunc регистрирует функцию-обработчик для обработки HTTP-запросов по заданному маршруту. В первый параметр мы передаем строку с URL-путем, во второй параметр мы передаем функцию, которая принимает http.ResponseWriter и указатель на http.Request и обрабатывает входящий запрос.

Синтаксис

gohttp.HandleFunc(pattern, handler)

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Welcome to the home page!")
  })

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

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

go"Welcome to the home page!"

Пример

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

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/", homeHandler)
  http.HandleFunc("/user/", userHandler)

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

func homeHandler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Home page")
}

func userHandler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "User profile page")
}

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

go"User profile page"

Пример

Давайте создадим обработчик, который обрабатывает GET и POST запросы по-разному и возвращает ответ в формате JSON:

gopackage main

import (
  "encoding/json"
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/api/data", dataHandler)

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

func dataHandler(w http.ResponseWriter, r *http.Request) {
  if r.Method == http.MethodGet {
    res := map[string]string{"message": "GET request received"}
    json.NewEncoder(w).Encode(res)
  } else if r.Method == http.MethodPost {
    res := map[string]string{"message": "POST request received"}
    json.NewEncoder(w).Encode(res)
  } else {
    http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
  }
}

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

go{"message":"GET request received"}

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

  • функцию http.Handle,
    которая регистрирует обработчик, реализующий интерфейс http.Handler
  • функцию http.ListenAndServe,
    которая запускает HTTP-сервер и прослушивает входящие запросы
  • функцию http.NotFound,
    которая возвращает клиенту ответ со статусом 404 Not Found
  • функцию http.Redirect,
    которая перенаправляет клиента на другой URL