веб приложение в Golang

В следующих уроках мы создадим веб-приложение под названием Snippetbox (временные заметки), через которое можно будет вставлять и делиться заметками в виде текста — что-то вроде Pastebin или Gists на GitHub.

Содержание статьи

Под конец результат будет выглядеть следующим образом:

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

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

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

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

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

Go в ВК ЧАТ в Telegram

golang web app

Поначалу приложение будет очень простым и состоять из одной страницы. В каждом уроке мы будем добавлять к нему новые элементы, пока пользователь не сможет просматривать заметки через веб-приложение. Мы затронем такие темы, как структура проекта, маршрутизация HTTP запросов, работа с базой данных, обработка HTML форм и безопасное отображение динамических данных.

В будущих уроках мы также добавим пользовательские аккаунты и ограничим доступ к приложению, чтобы только зарегистрированные пользователи могли создавать заметки. Это приведет к разбору более сложных тем, таких как конфигурация SSL сертификата, чтобы наше приложение работала на защищенном протоколе HTTPS, менеджмент сессии, пользовательская аутентификация и middleware (фильтры обработки HTTP-запросов).

Настройка рабочей папки веб-приложения

Перед написанием кода, нам нужно создать папку snippetbox, которая будет домашней директорией верхнего уровня для нашего проекта. Весь код, который мы напишем в последующих уроках, будет храниться в данной папке. Там также будут размещены специальные вспомогательные файлы для проекта вроде HTML шаблонов и CSS файлов.

Откройте терминал и создайте где-то у себя на компьютере новую папку под названием snippetbox. Мы разместили папку проекта в директории $HOME/code, но вы можете выбрать любое другое место.

Сейчас в папку проекта также можно добавить пустой файл main.go:

Подключение модулей к проекту

Далее нужно дать Go знать, что нам требуется использовать функциональность модулей для управления (и контроль версий) сторонними пакетами, которые будут импортироваться в наш проект.

Перед этим требуется решить, какой путь модуля будет использоваться в проекте.

Если вы не знакомы с возможностями модулей в Go, путь модуля — это просто каноническое название или идентификатор вашего проекта. Хотя можно использовать что угодно (почти) в качестве пути модуля, важна его уникальность. Чтобы избежать потенциальных конфликтов импорта с пакетами других людей или стандартной библиотекой в будущем, нужно выбрать путь модуля, который является глобально уникальным и вряд ли будет использоваться кем-либо еще. В сообществе Go принято использовать пространство имен для модуля, основываясь на принадлежащем вам как автору URL адресу.

В нашем случае понятным, сжатым и вряд ли используемым для чего-либо еще в этом проекте путем модуля будет golangs.org/snippetbox. Мы будем использовать его во всех уроках. Если хотите, можете заменить его на что-то уникальное для вас.

Теперь, когда мы определились с уникальным путем к модулю, подключим модули для нашего проекта.

Для этого убедитесь, что вы находитесь в корневой папки проекта, затем выполните в терминале команду go mod init, передав путь модуля в качестве параметра. Например:

На данный момент папка проекта должна выглядеть как на нижнем скриншоте. Обратите внимание, на созданный файл go.mod.

веб приложение на Golang

На данный момент в данном файле ничего особого не происходит. Если его открыть в текстовом редакторе, вы увидите следующее (у вас может быть разный путь к модулю):

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

Нужно проверить еще кое-что. Откройте окно терминала и запустите команду go env, чтобы получить информацию о текущей инсталляции Go. Результат должен походить на следующий:

Стоит обратить внимание на значение переменной GO111MODULE — в моем случае это пустая строка "". Чтобы Go начал использовать сторонние модули, значение должно быть On, Auto или пустой строкой "". Если значение Off, то его нужно заменить на On. Более подробно о том, для чего нужны эти значения, можете прочитать по ссылке.

Путь для внешних модулей

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

Например, если пакет размещен на https://github.com/foo/bar, то путь к модулю для проекта должен быть github.com/foo/bar.