Как работает HTTP-сервер в Go: создаём свой первый сервер
Введение
Каждый раз, когда мы открываем сайт, отправляем форму или даже просто обновляем страницу, происходит скрытый от нас процесс: браузер отправляет HTTP-запрос на сервер. Сервер принимает этот запрос, обрабатывает его и возвращает ответ — именно тот контент, который мы видим на экране.
По сути, HTTP-сервер — это программа, которая слушает запросы и умеет на них отвечать. Без серверов не существовало бы ни сайтов, ни API, ни современных приложений.
Язык Go (или Golang) отлично подходит для написания серверов. В нём уже есть встроенные инструменты для работы с сетью, поэтому даже начинающий разработчик может довольно быстро собрать свой первый работающий сервер. В этой статье разберёмся, как это работает, и напишем простой HTTP-сервер шаг за шагом.
Основная часть
1. Как вообще работает сервер
Если говорить просто, сервер — это программа, которая ждёт запросы и отвечает на них. Например, когда ты вводишь в браузере адрес, отправляется запрос, а сервер решает, что вернуть: страницу, текст или данные.
В Go уже есть готовые инструменты, поэтому не нужно писать всё с нуля.
Описание схемы
На схеме показан обычный процесс работы веб-приложения. Пользователь на стороне клиента взаимодействует с браузером, который отправляет запрос на сервер через сеть.
Сервер принимает этот запрос, обрабатывает его и возвращает ответ обратно. Браузер получает данные и отображает результат пользователю.
По сути, вся работа строится вокруг простой цепочки: запрос от клиента — обработка на сервере — ответ обратно.
2. Первый шаг — обработчик
Начнём с самой простой части — функции, которая будет отвечать на запрос:
Когда сервер получает запрос, он передаёт его в такую функцию.
- w используется для отправки ответа
- r содержит информацию о запросе
В нашем случае всё просто: сервер возвращает текст, который отобразится в браузере.
3. Привязываем обработчик к адресу
Теперь нужно сказать серверу, когда именно вызывать эту функцию:
Здесь мы связываем адрес / с функцией homeHandler. Это значит, что при переходе на главную страницу будет выполнен именно этот код.
4. Запускаем сервер
Остался последний шаг — запустить сервер:
После этого программа начинает “слушать” запросы.
Теперь можно открыть браузер и перейти по адресу:
http://localhost:8080
И увидеть результат.
5. Собираем всё вместе
Теперь объединим всё в одну программу:
6. Добавим ещё одну страницу
Сервер может обрабатывать разные адреса. Добавим ещё один обработчик:
И зарегистрируем его:
Теперь:
- / — главная страница
- /about — отдельная страница
Это уже похоже на структуру настоящего сайта.
7. Проверяем тип запроса
Иногда важно понимать, какой именно запрос пришёл:
Так можно контролировать поведение сервера и, например, обрабатывать только нужные запросы.
8. Возвращаем данные (JSON)
В реальных приложениях сервер часто возвращает данные, а не текст. Например:
Создадим обработчик:
Здесь сервер возвращает JSON — формат, который используется почти во всех API.
Заключение
В этой работе я разобрался, как устроен HTTP-сервер в Go, и попробовал написать его самостоятельно. Оказалось, что базовый сервер можно сделать довольно быстро, если понимать, как обрабатываются запросы и как работают обработчики.
На практике стало понятно, как сервер принимает запрос, передаёт его в нужную функцию и возвращает ответ. Также получилось посмотреть, как работают маршруты и чем отличаются разные типы запросов. Отдельно полезно было разобраться с JSON, так как он часто используется в реальных приложениях.
В целом Go показался удобным языком для таких задач: код получается достаточно простой и понятный, даже если только начинаешь разбираться в backend-разработке.
Думаю, дальше можно развить эту тему и попробовать сделать полноценное API или подключить базу данных, чтобы уже работать с реальными данными.