Метод http.ServeMux.HandleFunc
Метод http.ServeMux.HandleFunc регистрирует функцию-обработчик
для конкретного HTTP маршрута в мультиплексоре. Первым параметром
метод принимает строку с шаблоном маршрута, вторым - функцию-обработчик
с сигнатурой func(http.ResponseWriter, *http.Request). Этот метод
является альтернативой глобальной функции http.HandleFunc и
позволяет более гибко управлять маршрутизацией.
Синтаксис
serveMux.HandleFunc(pattern string, handler func(ResponseWriter, *Request))
Пример
Давайте зарегистрируем обработчик для корневого маршрута:
package 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/:
"Hello, World!"
Пример
Давайте зарегистрируем несколько обработчиков для разных маршрутов:
package 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:
"About Page"
Пример
Давайте используем именованную функцию вместо анонимной:
package 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:
"Hello from named handler"
Пример
Давайте зарегистрируем обработчик, который обрабатывает параметры запроса:
package 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:
"Hello, John!"
Смотрите также
-
метод
http.ServeMux.Handle,
который регистрирует обработчик, реализующий интерфейсhttp.Handler -
функцию
http.HandleFunc,
которая регистрирует обработчик в глобальном мультиплексоре -
функцию
http.NewServeMux,
которая создает новый экземпляр мультиплексора -
функцию
http.ListenAndServe,
которая запускает HTTP сервер на указанном порту