Шаблоны позволяют отделить логику приложения от представления. В 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) {
{data.Title}
{data.Content}
}
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, который мы обсуждаем в курсе, так и вне его — для упрощения работы с шаблонами в целом.```
еще контент в этом сообществе
еще контент в этом соообществе
войдите, чтобы увидеть
и подписаться на интересных профи