Теперь, когда все правильно настроено, давайте создадим первую версию нашего веб-приложения на Golang.

Начнем с трех основных пунктов:

Премиум 👑 канал по Golang

Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎

Подписаться на канал

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК ЧАТ в Telegram


  • Первым делом нам потребуется обработчик. Если вы знакомы с MVC паттерном проектирования, обработчики напоминают контроллеры. Они отвечают за выполнение логики приложения, а также  за за заголовок и тело HTTP ответа;
  • Вторым компонентом является маршрутизатор HTTP запросов (или servemux в Go терминологии). Он хранит связь между URL-шаблонами приложения и соответствующими обработчиками. В приложении, обычно есть один servemux, который содержит все URL маршруты;
  • Последним элементом для веб-приложения является веб-сервер. Одним из преимуществ Go является то, что вы можете использовать встроенный веб-сервер и прослеживать входящие HTTP запросы и все это будет частью самого приложения. Вам не потребуется внешний сторонний веб-сервер вроде Nginx или Apache.

Объединим эти компоненты в файле main.go, чтобы создать работающее приложение.

На заметку: Функция-обработчик home является обычной функцией с двумя параметрами. Параметр http.ResponseWriter предоставляет методы для объединения HTTP ответа и возвращение его пользователю, а второй параметр *http.Request является указателем на структуру, которая содержит информацию о текущем запросе (вроде HTTP-методов POST, GET, DELETE… и URL текущего запроса). В будущих уроках мы поговорим об этом подробнее.

Когда вы запустите этот код, он должен запустить веб-сервер на 4000 порту вашего компьютера. Каждый раз при отправки пользователем нового HTTP-запроса этот запрос получает веб-сервер, который проверяет URL и отправляет данный запрос соответствующему обработчику.

Сохраните файл main.go. Затем попробуйте запустить его из терминала с помощью команды go run.

Когд сервер запущен, откройте браузер и попробуйте перейти по адресу http://127.0.0.1:4000. Если все правильно, вы должны увидеть следующую страницу:

Веб-приложение на Golang

Внимание: Прежде чем продолжить, стоит пояснить, что маршрутизатор рассматривает URL-шаблон "/" как «catch-all» — то есть всеобщий захват. Так, что на данный момент все HTTP запросы к веб-серверу будут обрабатываться функцией home, вне зависимости от их URL пути. К примеру, при переходе на другой URL вроде http://localhost:4000/foo будет получен тот же ответ.

Если вернуться в окно терминала, можно остановить веб-сервер через комбинацию Ctrl+C.

Сетевые интерфейсы в Golang

Сетевой TCP-адрес, который передается в http.ListenAndServe(), должен быть в формате "host:port". Если не указать хост (как мы сделали с ":4000"), сервер будет прослушивать все доступные сетевые интерфейсы вашего компьютера. Как правило, нужно указать хост в адресе, только если у компьютера несколько сетевых интерфейсов, и требуется только один из них.

В других проектах или документации по Go иногда можно увидеть сетевые адреса, записанные с использованием именованных портов, таких как ":http" или ":http-alt" вместо числа. Если используется именованный порт, Go попытается найти соответствующий номер порта в файле /etc/services при запуске веб-сервера. Если совпадение не будет найдено, Go вернет ошибку.

Запуск веб-приложения в Golang

Во время разработки команда go run может стать удобным способом опробовать ваш код. По сути, это короткий способ компиляции кода, с помощью которого создается исполняемый бинарный файл в папке /tmp. Затем этот бинарный файл запускается.

Команда go run принимает:

  • список файлов с расширением .go, разделенных пробелами;
  • путь к определенному пакету (где символ точки . представляет текущую папку);
  • полный путь к модулю.

На данный момент для нашего приложения все три команды эквивалентны: