Перед добавлением нового кода в файл main.go стоит разобраться, как лучше организовать и структурировать наш проект.

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

Премиум 👑 курс по Golang

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

Записаться на курс

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

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

Go в ВК Go в Telegram

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

Для данного проекта мы будем использовать структуру для проекта, которая следует популярному и проверенному подходу. Это надежная отправная точка, и потом вы сможете повторно использовать данную общую структуру в других проектах.

Убедитесь, что вы находитесь в корне репозитория проекта и выполните следующие команды:

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

Структура сайта на Golang

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

  • Папка cmd будет содержать папки разных приложений в проекте. На данный момент у нас будет только одно исполняемое приложение и это наше веб-приложение. Оно будет находиться в папке cmd/web;
  • Папка pkg будет содержать вспомогательный код, не зависящий от приложения в проекте. Мы будем использовать данную папку для хранения вспомогательного кода, который потенциально может быть повторно использован. Это могут быть вспомогательные средства проверки данных и модели базы данных для проекта;
  • Папка ui будет содержать файлы HTML шаблона для пользовательского интерфейса, используемые веб-приложением. В частности, папка ui/html будет содержать HTML шаблоны, а папка ui/static будет содержать статические файлы (например, CSS, JS и изображения).

Почему мы используем именно эту структуру?

У данной структуры есть два больших преимущества:

  1. В структуре есть четкое разделение между Go файлами с кодом и файлами пользовательского интерфейса (HTML, CSS, JS) которые никак с Go не связаны. Весь написанный нами код на Go будет находиться исключительно в папках cmd и pkg. Корень проекта останется свободным для хранения ресурсов, не относящихся к Go. Это могут быть файлы пользовательского интерфейса, make-файлы и настройки модулей (включая наш файл go.mod). Данная структура упростит работу с веб-приложением, когда дело дойдет до развития и развертывания приложения в будущем;
  2. Структура отлично масштабируется, если вы хотите добавить в свой проект еще одно исполняемое приложение. Например, вы можете захотеть добавить CLI (Command Line Interface) для автоматизации некоторых административных задач в будущем. С такой структурой можно создать это CLI приложение в cmd/cli, и оно сможет импортировать и повторно использовать весь код, который была написан в папке pkg.

Рефакторинг существующего веб-приложения

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

Это тот же код из прошлых статей, просто мы удалили комментарии.

Теперь наше веб-приложение состоит из несколько файлов исходного кода из папки cmd/web.

Для запуска веб-приложения в текущем виде — придется использовать команду go run в терминале следующим образом:

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

Если по каким либо причинам у вас не получилось запустить веб-приложение из терминала, то вот пример как запустить приложение в Goland.

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

Скачать готовые файлы веб-приложения

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

Скачать: snippetbox-6.zip