Golang: HTML шаблоны для веб-сайта

Вывод HTML с помощью fmt.Printf

Для вывода небольших фрагментов HTML можно использовать стандартную функцию fmt.Printf. Например:

fmt.Printf("<h1>Main text</h1>")

Однако этот подход неудобен и может приводить к ошибкам, особенно при выводе сложного HTML-кода.

Более удобный, но всё ещё недостаточный способ:

fmt.Printf(`<h1>Заголовок</h1><p>Текст</p>`)

Этот метод лучше предыдущего, но не подходит для создания полноценных HTML-страниц.

Использование пакета html/template

Для вывода полноценных HTML-страниц используется пакет html/template:

import (
t"html/template"
t"net/http"
)

Создадим переменные: tmpl для хранения шаблона и _ для игнорирования ошибок (на данном этапе).

tmpl, _ := template.ParseFiles("templates/home_page.html")

Обратите внимание на путь к файлу шаблона – templates/home_page.html. Он подгружается из папки templates.

Для отображения шаблона используется метод Execute:

tmpl.Execute(w, bob)

Здесь w – объект http.ResponseWriter, а bob – объект данных, передаваемый в шаблон.

Создание HTML-шаблона (home_page.html)

Файл templates/home_page.html содержит базовую HTML-структуру. Указана кодировка UTF-8 для корректного отображения кириллицы:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Главная страница</title>
</head>
<body>
    <h1>Главная страница</h1>
</body>
</html>

После запуска сервера на странице отображается содержимое home_page.html.

Работа с шаблонами

Шаблонизатор позволяет выводить переменные из основного файла. Внутри шаблона используется двойные фигурные скобки {{ }}:

<p>Пользователь: {{.Name}}</p>

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

<p>Возраст пользователя: {{.Age}}</p>
<p>Деньги: {{.Money}}</p>

Условные операторы и циклы

В шаблонах доступны условные операторы if, else if и else:

{{if eq .Name "Bob"}}
    <p>Привет</p>
{{else}}
    <p>А ты кто?</p>
{{end}}

Доступны операторы сравнения: eq (равно), ne (не равно), lt (меньше), gt (больше), le (меньше или равно), ge (больше или равно).

Для перебора списков используется цикл range:

<ul>
    {{range .Hobbies}}
        <li>{{.}</li>
    {{end}}
</ul>

Для обработки пустого списка можно использовать else:

{{range .Hobbies}}
    <li>{{.}</li>
{{else}}
    <p>У пользователя нет хобби.</p>
{{end}}

Подключение Bootstrap

Для улучшения внешнего вида можно подключить Bootstrap:

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">

Можно использовать примеры шаблонов с сайта Bootstrap для создания дизайна. Необходимо подключить дополнительные CSS-файлы, если они требуются.

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

Что будем искать? Например,программа