Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Веб-сервер на Go. Функция HandleFunc()
Вместо функции Handle()
или совместно с ней можно воспользоваться функцией HandleFunc()
из пакета net/http
. Формат функции:
http.HandleFunc(pattern string,
handler func(http.ResponseWriter, *http.Request))
В первом параметре указывается строка с шаблоном запроса. Если указан символ /
, то будут перехватываться все запросы, для которых нет других зарегистрированных обработчиков. Если шаблон заканчивается символом /
, то он будет перехватывать все вложенные запросы. Например, если указан шаблон /contact/
, то при запросах http://localhost:3000/contact/ и http://localhost:3000/contact/test.php будет вызван один и тот же обработчик. Причем, если запрос указан без завершающего слеша (/contact
), то будет выполнено перенаправление на /contact/
:
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: /contact/
Date: Fri, 06 May 2022 18:38:19 GMT
Content-Length: 44
Во втором параметре указывается функция, которая будет вызвана, если запрос соответствует шаблону. Параметры этой функции полностью соответствуют одноименным параметрам метода ServeHTTP()
.
При использовании функций Handle()
и HandleFunc()
нужно передать значение nil
во втором параметре функции ListenAndServe()
:
fmt.Println(http.ListenAndServe(":3000", nil))
Переделаем код из листинга 20.3 и используем функцию HandleFunc()
(листинг 20.4).
Листинг 20.4. Функция HandleFunc()
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/",
func(rw http.ResponseWriter, r *http.Request) {
rw.Header().Add("Server", "MyServer 1.0")
// Запрос http://localhost:3000/
if r.URL.Path == "/" && r.Method == "GET" {
rw.Header().Add("Content-Type", "text/html; charset=UTF-8")
fmt.Fprintln(rw, "Страница /")
return
}
// Ошибка 404 (страница не найдена)
rw.Header()["Date"] = nil
http.Error(rw, "Ошибка 404. Страница не найдена", 404)
})
http.HandleFunc("/contact/",
func(rw http.ResponseWriter, r *http.Request) {
// Запрос http://localhost:3000/contact/
rw.Header().Add("Server", "MyServer 1.0")
rw.Header().Add("Content-Type", "text/html; charset=UTF-8")
fmt.Fprintln(rw, "Страница", r.URL.Path)
})
fmt.Println(http.ListenAndServe(":3000", nil))
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов