В качестве введения в пакет net/http
рассмотрим полностью рабочий пример простого веб-сервера:
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Функция main
начинается с вызова http.HandleFunc
, который сообщает пакету http
обрабатывать все корневые веб запросы ("/"
) с помощью handler
.
Затем он вызывает http.ListenAndServe
, указывая, что он должен прослушивать порт 8080 на любом интерфейсе (":8080"
). (Не беспокойтесь о втором параметре, nil
, пока.) Эта функция будет блокироваться до завершения программы.
ListenAndServe
всегда возвращает ошибку, поскольку она возвращается только тогда, когда случилась неожиданная ошибка. Чтобы записать эту ошибку в лог, мы заключаем вызов функции в log.Fatal
.
Функция handler
имеет тип http.HandlerFunc
. Он принимает http.ResponseWriter
и http.Request
как его аргументы.
Значение http.ResponseWriter
собирает ответ HTTP-сервера; написав в него, мы отправляем данные HTTP-клиенту.
http.Request
- это структура данных, которая представляет клиентский HTTP-запрос. r.URL.Path
является компонентом пути URL запроса. Конечный [1:]
означает "создать под-срез Path
от 1-го символа до конца." Это удаляет ведущий "/" из имени пути.
Если вы запустите эту программу и обратитесь к URL:
http://localhost:8080/monkeys
программа представит страницу, содержащую:
Hi there, I love monkeys!
Читайте также:
- Веб-приложение на Go: использование net/http для обслуживания вики-страниц
- Веб-приложение на Go: введение
- Веб-приложение на Go: структуры данных, сохранение и загрузка страницы
- Эффективный Go: веб-сервер
Комментариев нет:
Отправить комментарий