Использование Go в качестве бэкэнда

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

Результатом этого является гораздо лучший пользовательский интерфейс. В случае Javascript вы можете использовать Angular, React, Vue и множество других фреймворков Javascript, чтобы ваше приложение работало как SPA. Но вы также можете использовать простой и простой Javascript, чтобы заставить его работать.

Эта статья покажет вам, как сделать простой SPA, используя как можно меньше кода Javascript. Вы поймете, как это работает, а затем сможете расширить этот код до более широкого приложения.

Вы можете использовать серверный язык по своему выбору, в этом руководстве Go и Goland используются в качестве IDE. Репозиторий Github находится внизу статьи.

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



Подготовка проекта

Создайте новый проект, назовите его medium_spa и используйте модули Go. В корневом каталоге создайте три дополнительных каталога: html, css и js.

Создайте три файла в корневом каталоге: main.go, homepage.go и content.go. Этот файл будет обрабатывать нашу внутреннюю логику

Создайте три файла в каталоге html: homepage.html, first_tab.html и second_tab.html.

Создайте один файл в каталоге css: homepage.css.

Создайте один файл в каталоге js: homepage.js. Этот файл будет обрабатывать нашу логику внешнего интерфейса.

Обновление бэкэнда

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

Этот код выполняет три основные функции:

  • Программа Go будет работать как служба
  • Программа Go будет выступать в роли веб-сервера, обслуживающего все необходимые файлы.
  • Программа Go будет выступать в роли внутреннего поставщика динамического контента: это строка router.POST(“/get_content”, getContent)

Теперь переключитесь на homepage.go и обновите его, используя приведенный ниже код. Это простая функция, поэтому, когда вы открываете браузер на http: // localhost, он будет обслуживать этот файл homepage.html.

Обслуживание динамического контента

Перейдите на content.go и вставьте код ниже. В начале кода вы видите, что нам нужно сделать две структуры.

Первый, ContentDataInput, будет содержать входящие данные: какой контент запрашивается со страницы.
Второй, ContentDataOutput, будет содержать исходящие данные, какой ответ будет отправлен обратно на страницу.

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

В основном эта функция декодирует, какой контент - какой файл html - запрашивается у приложения. Затем функция считывает файл с диска и отправляет его обратно.

И это все, что нам нужно для серверной части приложения.

Обновление внешнего интерфейса: HTML и CSS

Перейдите на свой homepage.html и обновите файл, используя приведенный ниже код.

Здесь ничего особенного: файл html загрузит css и js при запуске, а затем отобразит простое меню навигации <navbar>.

Интересным здесь является элемент <div id=”content”></div>, так как это элемент, который будет содержать наши динамические данные в будущем.

Перейдите к homepage.css и обновите файл приведенным ниже кодом, чтобы наше приложение выглядело немного лучше.

Теперь обновите first_tab.html приведенным ниже кодом. Как видите, здесь всего два элемента: кнопка и абзац. Оба будут вставлены в этот <div id=”content”></div> из нашего homepage.html по запросу.

Аналогичным образом обновите файл second.tab.html.

Обновление интерфейса: Javascript

Наконец мы подошли к концу. Обновите homepage.js приведенным ниже кодом.

Там меньше 20 строк кода, на самом деле всего 17.

Эти строки будут ждать щелчка navbar, а затем будут запрашивать содержимое. Как только контент поступает, он вставляется в наш элемент <div id=”content”></div>.

Мы даже обрабатываем случай, когда пользователь нажимает на панель навигации за пределами наших двух вкладок с помощью (event.target.id !== “navbar”).

И это все, что вам нужно. Теперь у вас работает SPA, и содержимое загружается динамически, когда вы щелкаете нужную вкладку. Запустите все это (не забудьте установить проект Goland в пакетный режим), и вы увидите, как именно загружается контент, щелкнув вкладку. Без перезагрузки всей страницы.

Добавление некоторого взаимодействия

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

Обновите homepage.js одной строкой кода, функцией addInteraction(). Эта функция будет вызываться только после загрузки содержимого.

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

Заключительная часть - создать эти две функции. Первая функция будет увеличивать элемент <p>, другая - уменьшать его. Первая функция будет загружена на первой вкладке, вторая - на второй.

Это конечный результат с правильной функциональностью для обеих вкладок.

Резюме

Как видите, создание веб-страницы, которая действует как SPA, не составляет большого труда, и основная его часть может быть выполнена менее чем за час. Используя этот подход, вам не нужно использовать какой-либо специальный фреймворк, и ваш код будет чистым и простым.