Ответ
В Go нет концепции "View" как в классических MVC-фреймворках (вроде Rails или Django), но есть мощные инструменты для работы с шаблонами. Основной подход — использование стандартной библиотеки html/template
.
Ключевое отличие html/template
от text/template
— автоматическое экранирование данных для предотвращения XSS-атак. Это делает его безопасным для генерации HTML по умолчанию.
Основные подходы к рендерингу:
-
Стандартная библиотека
html/template
: Идеально для серверного рендеринга (SSR). Позволяет вставлять данные в HTML-шаблоны, использовать условные операторы, циклы и вложенные шаблоны.// main.go import ( "html/template" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { // template.Must паникует при запуске, если файл шаблона не найден или содержит ошибки. // Это лучше, чем получать ошибку при каждом запросе. tmpl := template.Must(template.ParseFiles("view.html")) data := struct { Title string Items []string }{ Title: "Моя страница", Items: []string{"Пункт 1", "Пункт 2", "Пункт 3"}, } tmpl.Execute(w, data) }
-
Веб-фреймворки (Gin, Echo, Chi): Они часто предоставляют удобные обертки над
html/template
для упрощения рендеринга в контексте их роутеров. -
API + Фронтенд-фреймворк (SPA): Самый современный подход. Go-бэкенд отдает данные в формате JSON, а рендерингом занимается фронтенд-приложение (React, Vue, Svelte), которое получает эти данные.