Когда вы создаете веб-сайт, вы обычно создаете некоторый окончательный контент динамически. Затем вы захотите ввести эти данные в свои конечные веб-страницы для отображения в браузере.
Вы можете выбрать один из двух подходов: встроить структуру своей страницы в программу или объединить окончательные данные с отдельными файлами шаблонов.
Шаблоны обеспечивают разделение задач для более удобной в сопровождении кодовой базы. Это также упрощает разделение внешних и внутренних задач, распределяя их между разными членами команды. Go имеет отличную поддержку шаблонов в своей стандартной библиотеке.
Начало работы с шаблонами в Go
В стандартной библиотеке Go есть два пакета шаблонов: текст/шаблон а также html/шаблон. Пакет text/template имеет функциональные возможности для разбора текстовых файлов, тогда как html/template обрабатывает HTML. Используя html/шаблон, вы защищены от атак межсайтового скриптинга (XSS), поскольку Go избегает ввода данных во время рендеринга. Это еще одно преимущество шаблонов перед ручным подходом.
Поскольку пакет шаблона является частью стандартной библиотеки, вам не нужно устанавливать какие-либо зависимости; просто импортируйте его:
импорт "html/шаблон"
Начать с создание HTML-файла для использования в качестве шаблона для вашего приложения. Вы можете использовать стандартный .html расширение или либо .gohtml или же .тмпл, оба являются общими. Какое бы расширение вы ни использовали, функциональность вашего приложения будет одинаковой. Некоторые текстовые редакторы могут применять различную подсветку синтаксиса в зависимости от расширений ваших шаблонов. Вот основной скелет:
<!ДОКТИП HTML>
<html язык="en">
<глава>
<мета кодировка ="UTF-8">
<заглавие>Документ</title>
</head>
<тело>
</body>
</html>
Сохраните этот файл в каталоге вашей программы Go. Теперь вы можете начать работать с ним как с шаблоном в вашей программе.
Создайте глобальный экземпляр Шаблон метод пакета шаблонов. Вы получите доступ к этому экземпляру шаблона из различных частей вашей программы.
вар тмплт *шаблон. Шаблон
Вам нужно будет создать простой сервер для рендеринга и отображения ваших шаблонов. Вот как запустить простой сервер в Go, используя сеть/http упаковка:
функциязапустить сервер() {
http. HandleFunc("/home", handlePage)
ошибка := http. ListenAndServe("локальный хост:8080", ноль)
если ошибся != ноль {
журнал. Fatalln("Ошибка сервера:", err)
}
}
Вы позвоните в запустить сервер из вашей основной функции, чтобы запустить сервер. У сервера есть только один маршрут, /home маршрут, который будет отображать вашу страницу. дескриптор страницы Параметр — это имя функции-обработчика, которая будет отображать вашу страницу. слушать и обслуживать метод запускает сервер, прослушивающий порт 8080 на localhost, то есть ваш собственный компьютер.
Передача переменных в шаблоны
Создайте глобальную структуру с именем Новости:
тип Новости структура {
Заголовок нить
Тело нить
}
Вы будете использовать эту структуру для хранения данных и передачи их в свой шаблон для отображения на последней странице. Затем в своем шаблоне вы можете использовать этот синтаксис для ввода данных:
{{ имя }}
Где имя это имя переменной, которую вы передали в свой шаблон. Когда вы визуализируете шаблон, он заменяет значения в фигурных скобках соответствующими данными из вашего кода Go. Поскольку в следующем примере передается структура, вы будете использовать точечную нотацию для доступа к ее полям:
<тело>
<h1>{{ .Заголовок }}</h1>
<п> {{ .Тело }} </п>
</body>
Замените пустой элемент body в разметке скелета вашего шаблона кодом выше.
дескриптор страницы Функция обработчика проверит, что запрос страницы является запросом GET. Затем он заполняет структуру образцами данных перед рендерингом шаблона и отображением последней страницы:
функциядескриптор страницы(писатель http. ResponseWriter, запрос *http. Запрос) {
если запрос. Метод == "ПОЛУЧИТЬ" {
tmplt, _ = шаблон. ParseFiles("tutorial.html")событие := Новости{
Заголовок: «На makeuseof.com есть все, что связано с технологиями»,
Текст: "Посетите MUO за все, что связано с технологиями»,
}ошибка := тмплт. Выполнить (писатель, событие)
если ошибся != ноль {
возвращаться
}
}
}
ParseFiles метод анализирует указанный вами файл HTML. мероприятие переменная является инициализированной структурой. Выполнять метод вставит предоставленные данные на последнюю страницу в соответствии с заполнителями в шаблоне. Выполнение занимает ResponseWriter и данные, в данном случае, структура.
Вот результат запуска сервера и посещения страницы:
Использование управляющих структур в шаблонах
Вы также можете использовать управляющие структуры, такие как условные операторы и циклы, в своих шаблонах.
Цикл позволяет выводить несколько значений и повторно использовать одну и ту же структуру для каждого из них. Использовать диапазон ключевое слово для определения начала повторяющегося контента и конец ключевое слово в конце. Внутри цикла вы можете использовать {{.}} синтаксис для ввода текущего значения:
{{диапазон .}}
- {{.}}
{{конец}}
Затем вы передадите имя структуры данных, которую хотите пройти, в качестве параметра методу Execute:
makeUseOfCategories := []нить{"Объяснение технологии", "Программирование", "Linux",
"Android", "iOS", "Многие другие..."}ошибка := тмплт. Выполнить (писатель, makeUseOfCategories)
если ошибся != ноль {
возвращаться
}
makeUseOfCategories переменная представляет собой фрагмент строк для передачи в качестве параметра данных. Вот результат перебора среза:
Вы можете использовать условный оператор в своих шаблонах для проверки значения логической переменной. Создайте структуру с логическими полями, например:
тип TrueFalser структура {
Правда логический
Ложь логический
по умолчанию логический
}
Чтобы использовать условное выражение, включите если ключевое слово в двойных фигурных скобках перед именем проверяемой переменной. Завершите условный блок с помощью конец ключевое слово в скобках:
{{если .Истина}}
<п>Оценивает true и выводит</п>
{{конец}}{{если .IsDefault}}
<п>Оценивает false и выиграл'т выход</п>
{{конец}}
{{если .IsFalse}}
<п>Оценивает false и выиграл'т выход</п>
{{конец}}
При инициализации структуры в Go значения по умолчанию устанавливаются равными false, поэтому, если вы не инициализируете поле, оно оценивается как false. При инициализации структуры и передаче переменной в качестве данных в шаблон только те поля, которые оцениваются как истинные, приводят к появлению выходных данных.
выбор := TrueFalser {
Правда: истинный,
Ложь: ЛОЖЬ,
}
ошибка := тмплт. Исполнить (писатель, выбор)
Окончательный вывод включает только один абзац, так как только поле isTrue оценивается как true:
Вам не нужно использовать шаблоны для ваших серверных приложений
Использование шаблонов не является обязательным требованием для ваших приложений Go. Вы можете использовать другие подходы, такие как встраивание структуры вашей страницы в вашу программу, наряду с ее логикой и другим поведением.
Тем не менее, вы в конечном итоге сделаете больше работы для себя. Шаблоны Go помогают предотвратить XSS-атаки и упрощают отделение работы над структурой страницы от внутренней логики.