Skip to content

Веб-сервер net/http

В прошлой лекции мы рассмотрели вариант создания самописного веб-сервера. В этой лекции ты узнаешь, как написать свой http-веб-сервер, используя стандартную библиотеку net/http.

Следуй алгоритму, который приводится ниже, а результаты практики расположи по следующему пути:

/module4/webserver/http

Создать веб-сервер на Go достаточно просто, это может быть сделано с использованием встроенного пакета net/http.

  1. Начни с импорта необходимых пакетов:

  1. Определи функцию-обработчика, которая будет вызываться при каждом входящем запросе. Эта функция должна иметь сигнатуру http.HandlerFunc:

Изображение выглядит как текст  Автоматически созданное описание

  1. Определи функцию main() и используй функцию http.HandleFunc для регистрации обработчика на конкретный путь:

  1. Запусти программу с помощью команды go run main.go и открой в браузере http://localhost:8080.

  2. Для более сложных задач в качестве обработчика можно использовать роутер или фреймворк, например gorilla/mux.

На что стоит обратить внимание

fmt.Fprintf(w, "Hello, World!") используется для записи строки «Hello, World!» в http.ResponseWriter, что позволяет отправить этот текст как ответ клиенту.

http.ListenAndServe(":8080", nil) запускает веб-сервер на порту 8080 и ожидает входящие запросы. Второй аргумент — это хендлер, который отвечает за обработку запросов, но в данном случае мы используем хендлер, зарегистрированный ранее с помощью http.HandleFunc.

Важно отметить, что http.ListenAndServe блокирует выполнение программы до тех пор, пока сервер не будет остановлен. В боевом окружении рекомендуется использовать более надежные методы запуска сервера, такие как использование системы деплоя.

  1. Чтобы обрабатывать запросы на различные методы http, можно использовать условное выражение в функции-обработчике, например:

Изображение выглядит как текст  Автоматически созданное описание

  1. Для обработки параметров запроса и парсинга тела запроса можно использовать библиотеки типа github.com/gorilla/mux или github.com/julienschmidt/httprouter.

  2. Для обработки сессий и аутентификации можно использовать библиотеки типа github.com/gorilla/sessions и golang.org/x/crypto/bcrypt.

  3. Для логирования и мониторинга можно использовать библиотеки типа github.com/sirupsen/logrus и github.com/prometheus/client_golang.

  4. Не забывай обрабатывать ошибки, которые могут возникнуть при работе с сетью или файловой системой твоего приложения.

Важно помнить, что это лишь базовое описание процесса создания веб-сервера на Go. В зависимости от сложности проекта может потребоваться использование дополнительных библиотек и применение более сложных методов.

Если посмотреть под капотом функции ListenAndServe:

В исходном коде мы увидим похожую на нашу реализацию TCP веб-сервера.