логотип PurpleSchool
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развития
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • Карьерные пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
логотип PurpleSchool
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • логотип PurpleSchool
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Шаблоны в Go. Работа с Templ.

    Шаблоны в Go. Работа с Templ.

    Аватар автора Шаблоны в Go. Работа с Templ.

    Роман Лобигер

    Иконка календаря26 февраля 2025
    постjuniorИконка уровня junior

    Шаблоны позволяют отделить логику приложения от представления. В Go стандартные пакеты text/template и html/template обеспечивают базовую функциональность. Однако, по мере развития приложений, возникают потребности в более мощных и типобезопасных инструментах. Как раз Templ — такой шаблонизатор для Go с поддержкой компонентов, JSX-подобного синтаксиса и статической типизации. Чего нет у других шаблонизаторов или встроенного в Fiber fiber.TemplateEngine

    Пример использования стандартных шаблонов

    В данном примере мы определяем структуру PageData для передачи данных в шаблон и используем метод Execute для рендеринга шаблона с данными.

    package main
    import (
        "html/template"
        "net/http"
    )
    type PageData struct {
        Title   string
        Content string
    }
    func handler(w http.ResponseWriter, r *http.Request) {
        tmpl := template.Must(template.ParseFiles("template.html"))
        data := PageData{
            Title:   "Главная страница",
            Content: "Добро пожаловать на наш сайт!",
        }
        tmpl.Execute(w, data)
    }
    func main() {
        http.HandleFunc("/", handler)
        http.ListenAndServe(":8080", nil)
    }
    

    Минусы стандартных шаблонов

    - Медленный рендеринг — шаблон парсится и интерпретируется во время выполнения

    - Строковые ошибки — если передать не тот тип данных, приложение упадёт уже на этапе рендеринга

    - Нет компонентов — шаблоны сложно переиспользовать и тестировать

    Templ - отличия

    - Статическая типизация и безопасность типов — Templ компилирует шаблоны в Go-код, это позволяет обнаруживать ошибки на этапе компиляции, обеспечивая безопасность типов и снижая вероятность ошибок во время выполнения

    - Производительность — поскольку Templ генерирует Go-код из шаблонов, процесс рендеринга ускоряется, повышается производительность приложения

    - Синтаксис — Templ предоставляет более выразительный синтаксис, поддерживает компоненты

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

    Пример использования

    1 — Определение шаблона

    templ PageComponent(data PageData) {
      <div>{data.Title}</div>
      <div>{data.Content}</div>
    }
    

    2 — Генерация Go-кода

    templ generate
    

    3 — Использование

    import (
      "fmt"
      "net/http"
      "github.com/a-h/templ"
    )
    func main() {
      component := PageComponent(PageData{
            Title:   "Главная страница",
            Content: "Добро пожаловать на наш сайт!",
      })
      
      http.Handle("/", templ.Handler(component))
      fmt.Println("Listening on :3000")
      http.ListenAndServe(":3000", nil)
    }
    

    Другие шаблонизаторы

    • Jet — шаблонизатор с поддержкой компиляции, но использует собственный DSL вместо Go. Это упрощает написание шаблонов, но делает их менее типобезопасными. В Templ, наоборот, можно использовать Go-типизацию и избежать проблем с runtime-ошибками.

    • Quicktemplate — один из самых быстрых шаблонизаторов, но его синтаксис не самый удобный для повседневной разработки. Он больше подходит для high-load систем, где важна предельная скорость рендеринга.

    Итог

    По сравнению с иными шаблонизаторами, в Templ мы получаем наилучшее соотношение удобства разработки, поддержки и итоговой производительности. Его можно рассматривать как в рамках fullstack, который мы обсуждаем в курсе, так и вне его — для упрощения работы с шаблонами в целом.

    Иконка глаза1 855

    Комментарии

    0

    Постройте личный план изучения Golang - Templ Fiber HTMX до уровня Middle — бесплатно!

    Golang - Templ Fiber HTMX — часть карты развития Backend

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Старт в Python

    Антон Ларичев
    AI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга5.0
    бесплатно
    Подробнее
    Иконка молнииНовый
    изображение курса

    Основы Python

    Антон Ларичев
    AI-тренажеры
    Практика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Основы C#

    Антон Ларичев
    AI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.5
    3 999 ₽ 6 990 ₽
    Подробнее
    Иконка чипа+2