В качестве введения в пакет 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: веб-сервер

Комментариев нет:
Отправить комментарий