Как работает HTTP-сервер в Go: создаём свой первый сервер

Как работает HTTP-сервер в Go: создаём свой первый сервер

Введение

Каждый раз, когда мы открываем сайт, отправляем форму или даже просто обновляем страницу, происходит скрытый от нас процесс: браузер отправляет HTTP-запрос на сервер. Сервер принимает этот запрос, обрабатывает его и возвращает ответ — именно тот контент, который мы видим на экране.

По сути, HTTP-сервер — это программа, которая слушает запросы и умеет на них отвечать. Без серверов не существовало бы ни сайтов, ни API, ни современных приложений.

Язык Go (или Golang) отлично подходит для написания серверов. В нём уже есть встроенные инструменты для работы с сетью, поэтому даже начинающий разработчик может довольно быстро собрать свой первый работающий сервер. В этой статье разберёмся, как это работает, и напишем простой HTTP-сервер шаг за шагом.

Основная часть

1. Как вообще работает сервер

Если говорить просто, сервер — это программа, которая ждёт запросы и отвечает на них. Например, когда ты вводишь в браузере адрес, отправляется запрос, а сервер решает, что вернуть: страницу, текст или данные.

В Go уже есть готовые инструменты, поэтому не нужно писать всё с нуля.

Как работает HTTP-сервер в Go: создаём свой первый сервер

Описание схемы

На схеме показан обычный процесс работы веб-приложения. Пользователь на стороне клиента взаимодействует с браузером, который отправляет запрос на сервер через сеть.

Сервер принимает этот запрос, обрабатывает его и возвращает ответ обратно. Браузер получает данные и отображает результат пользователю.

По сути, вся работа строится вокруг простой цепочки: запрос от клиента — обработка на сервере — ответ обратно.

2. Первый шаг — обработчик

Начнём с самой простой части — функции, которая будет отвечать на запрос:

Эта функция называется обработчиком <b>(handler)</b>.
Эта функция называется обработчиком (handler).

Когда сервер получает запрос, он передаёт его в такую функцию.

  • w используется для отправки ответа
  • r содержит информацию о запросе

В нашем случае всё просто: сервер возвращает текст, который отобразится в браузере.

3. Привязываем обработчик к адресу

Теперь нужно сказать серверу, когда именно вызывать эту функцию:

Как работает HTTP-сервер в Go: создаём свой первый сервер

Здесь мы связываем адрес / с функцией homeHandler. Это значит, что при переходе на главную страницу будет выполнен именно этот код.

4. Запускаем сервер

Остался последний шаг — запустить сервер:

Эта строка запускает сервер на порту <b>8080</b>.
Эта строка запускает сервер на порту 8080.

После этого программа начинает “слушать” запросы.

Теперь можно открыть браузер и перейти по адресу:

http://localhost:8080

И увидеть результат.

5. Собираем всё вместе

Теперь объединим всё в одну программу:

Это минимальный, но полностью рабочий HTTP-сервер.
Это минимальный, но полностью рабочий HTTP-сервер.

6. Добавим ещё одну страницу

Сервер может обрабатывать разные адреса. Добавим ещё один обработчик:

Как работает HTTP-сервер в Go: создаём свой первый сервер

И зарегистрируем его:

Как работает HTTP-сервер в Go: создаём свой первый сервер

Теперь:

  • / — главная страница
  • /about — отдельная страница

Это уже похоже на структуру настоящего сайта.

7. Проверяем тип запроса

Иногда важно понимать, какой именно запрос пришёл:

Как работает HTTP-сервер в Go: создаём свой первый сервер

Так можно контролировать поведение сервера и, например, обрабатывать только нужные запросы.

8. Возвращаем данные (JSON)

В реальных приложениях сервер часто возвращает данные, а не текст. Например:

Как работает HTTP-сервер в Go: создаём свой первый сервер

Создадим обработчик:

Как работает HTTP-сервер в Go: создаём свой первый сервер

Здесь сервер возвращает JSON — формат, который используется почти во всех API.

Заключение

В этой работе я разобрался, как устроен HTTP-сервер в Go, и попробовал написать его самостоятельно. Оказалось, что базовый сервер можно сделать довольно быстро, если понимать, как обрабатываются запросы и как работают обработчики.

На практике стало понятно, как сервер принимает запрос, передаёт его в нужную функцию и возвращает ответ. Также получилось посмотреть, как работают маршруты и чем отличаются разные типы запросов. Отдельно полезно было разобраться с JSON, так как он часто используется в реальных приложениях.

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

Думаю, дальше можно развить эту тему и попробовать сделать полноценное API или подключить базу данных, чтобы уже работать с реальными данными.

Начать дискуссию