логотип PurpleSchool
логотип PurpleSchool

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

Шаблоны позволяют отделить логику приложения от представления. В 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, который мы обсуждаем в курсе, так и вне его — для упрощения работы с шаблонами в целом.

Комментарии

0

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

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

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

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

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

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

Основы разработки

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

Основы Python

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

Основы C#

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