В следующих уроках мы создадим веб-приложение под названием Snippetbox (временные заметки), через которое можно будет вставлять и делиться заметками в виде текста — что-то вроде Pastebin или Gists на GitHub.
Содержание статьи
Под конец результат будет выглядеть следующим образом:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
Поначалу приложение будет очень простым и состоять из одной страницы. В каждом уроке мы будем добавлять к нему новые элементы, пока пользователь не сможет просматривать заметки через веб-приложение. Мы затронем такие темы, как структура проекта, маршрутизация HTTP запросов, работа с базой данных, обработка HTML форм и безопасное отображение динамических данных.
В будущих уроках мы также добавим пользовательские аккаунты и ограничим доступ к приложению, чтобы только зарегистрированные пользователи могли создавать заметки. Это приведет к разбору более сложных тем, таких как конфигурация SSL сертификата, чтобы наше приложение работало на защищенном протоколе HTTPS, менеджмент сессии, пользовательская аутентификация и middleware (фильтры обработки HTTP-запросов).
Настройка рабочей папки веб-приложения
Перед написанием кода, нам нужно создать папку snippetbox
, которая будет домашней директорией верхнего уровня для нашего проекта. Весь код, который мы напишем в последующих уроках, будет храниться в данной папке. Там также будут размещены специальные вспомогательные файлы для проекта вроде HTML шаблонов и CSS файлов.
Откройте терминал и создайте где-то у себя на компьютере новую папку под названием snippetbox
. Мы разместили папку проекта в директории $HOME/code
, но вы можете выбрать любое другое место.
1 |
$ mkdir -p $HOME/code/snippetbox |
Сейчас в папку проекта также можно добавить пустой файл main.go
:
1 2 |
$ cd $HOME/code/snippetbox $ touch main.go |
Подключение модулей к проекту
Далее нужно дать Go знать, что нам требуется использовать функциональность модулей для управления (и контроль версий) сторонними пакетами, которые будут импортироваться в наш проект.
Перед этим требуется решить, какой путь модуля будет использоваться в проекте.
Если вы не знакомы с возможностями модулей в Go, путь модуля — это просто каноническое название или идентификатор вашего проекта. Хотя можно использовать что угодно (почти) в качестве пути модуля, важна его уникальность. Чтобы избежать потенциальных конфликтов импорта с пакетами других людей или стандартной библиотекой в будущем, нужно выбрать путь модуля, который является глобально уникальным и вряд ли будет использоваться кем-либо еще. В сообществе Go принято использовать пространство имен для модуля, основываясь на принадлежащем вам как автору URL адресу.
В нашем случае понятным, сжатым и вряд ли используемым для чего-либо еще в этом проекте путем модуля будет golangify.com/snippetbox
. Мы будем использовать его во всех уроках. Если хотите, можете заменить его на что-то уникальное для вас.
Теперь, когда мы определились с уникальным путем к модулю, подключим модули для нашего проекта.
Для этого убедитесь, что вы находитесь в корневой папки проекта, затем выполните в терминале команду go mod init
, передав путь модуля в качестве параметра. Например:
1 2 3 |
$ cd $HOME/code/snippetbox $ go mod init golangify.com/snippetbox go: creating new go.mod: module golangify.com/snippetbox |
На данный момент папка проекта должна выглядеть как на нижнем скриншоте. Обратите внимание, на созданный файл go.mod
.
На данный момент в данном файле ничего особого не происходит. Если его открыть в текстовом редакторе, вы увидите следующее (у вас может быть разный путь к модулю):
1 2 3 |
module golangify.com/snippetbox go 1.15 |
Позже во время сборки проекта мы увидим, как данный файл используется для определения сторонних пакетов (и их версий), которые требуются установить для работы нашего проекта.
Нужно проверить еще кое-что. Откройте окно терминала и запустите команду go env
, чтобы получить информацию о текущей инсталляции Go. Результат должен походить на следующий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/alex/.cache/go-build" GOENV="/home/alex/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/alex/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/alex/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/home/alex/Work/Golang College/Code/golangcollege.com/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build733636700=/tmp/go-build -gno-record-gcc-switches" |
Стоит обратить внимание на значение переменной GO111MODULE
— в моем случае это пустая строка ""
. Чтобы Go начал использовать сторонние модули, значение должно быть On
, Auto
или пустой строкой ""
. Если значение Off
, то его нужно заменить на On
. Более подробно о том, для чего нужны эти значения, можете прочитать по ссылке.
Путь для внешних модулей
При создании пакета или приложения, которые могут быть скачаны из интернета и использованы другими людьми и программами, рекомендуется, чтобы путь модуля совпадал с местом, откуда будет скачан данный модуль.
Например, если пакет размещен на https://github.com/foo/bar
, то путь к модулю для проекта должен быть github.com/foo/bar
.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»