Веб-сервер net/http
В прошлой лекции мы рассмотрели вариант создания самописного веб-сервера. В этой лекции ты узнаешь, как написать свой http-веб-сервер, используя стандартную библиотеку net/http.
Следуй алгоритму, который приводится ниже, а результаты практики расположи по следующему пути:
/module4/webserver/http
Создать веб-сервер на Go достаточно просто, это может быть сделано с использованием встроенного пакета net/http.
- Начни с импорта необходимых пакетов:
- Определи функцию-обработчика, которая будет вызываться при каждом входящем запросе. Эта функция должна иметь сигнатуру http.HandlerFunc:
- Определи функцию main() и используй функцию http.HandleFunc для регистрации обработчика на конкретный путь:
-
Запусти программу с помощью команды go run main.go и открой в браузере http://localhost:8080.
-
Для более сложных задач в качестве обработчика можно использовать роутер или фреймворк, например gorilla/mux.
На что стоит обратить внимание
fmt.Fprintf(w, "Hello, World!") используется для записи строки «Hello, World!» в http.ResponseWriter, что позволяет отправить этот текст как ответ клиенту.
http.ListenAndServe(":8080", nil) запускает веб-сервер на порту 8080 и ожидает входящие запросы. Второй аргумент — это хендлер, который отвечает за обработку запросов, но в данном случае мы используем хендлер, зарегистрированный ранее с помощью http.HandleFunc.
Важно отметить, что http.ListenAndServe блокирует выполнение программы до тех пор, пока сервер не будет остановлен. В боевом окружении рекомендуется использовать более надежные методы запуска сервера, такие как использование системы деплоя.
- Чтобы обрабатывать запросы на различные методы http, можно использовать условное выражение в функции-обработчике, например:
-
Для обработки параметров запроса и парсинга тела запроса можно использовать библиотеки типа github.com/gorilla/mux или github.com/julienschmidt/httprouter.
-
Для обработки сессий и аутентификации можно использовать библиотеки типа github.com/gorilla/sessions и golang.org/x/crypto/bcrypt.
-
Для логирования и мониторинга можно использовать библиотеки типа github.com/sirupsen/logrus и github.com/prometheus/client_golang.
-
Не забывай обрабатывать ошибки, которые могут возникнуть при работе с сетью или файловой системой твоего приложения.
Важно помнить, что это лишь базовое описание процесса создания веб-сервера на Go. В зависимости от сложности проекта может потребоваться использование дополнительных библиотек и применение более сложных методов.
Если посмотреть под капотом функции ListenAndServe:
В исходном коде мы увидим похожую на нашу реализацию TCP веб-сервера.