Найти в Дзене

Курс - «Программирование на Go для начинающих» - #27 Разработка веб-приложений. Шаблонизация и работа с формами.

Оглавление

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

Шаблонизация с использованием html/template

Пакет html/template в Go предлагает мощные инструменты для шаблонизации, которые помогут вам генерировать безопасный HTML-код, автоматически предотвращая такие угрозы, как XSS (межсайтовый скриптинг). Давайте рассмотрим пример использования.

Пример шаблона

Создайте файл шаблона template.html:

<html>
<head>
<title>{{.Title}}</title>
</head>
<body>
<h1>{{.Header}}</h1>
<p>{{.Body}}</p>
</body>
</html>

В этом шаблоне {{.Title}}, {{.Header}}, и {{.Body}} являются местозаполнителями, значения для которых будут предоставлены в Go-программе.

Генерация HTML с использованием шаблона

package main
import (
"html/template"
"os"
)
type Page struct {
Title string
Header string
Body string
}
func main() {
tmpl, err := template.ParseFiles("template.html")
if err != nil {
panic(err)
}
data := Page{
Title: "Пример шаблона",
Header: "Заголовок страницы",
Body: "Это тело страницы.",
}
err = tmpl.Execute(
os.Stdout, data)
if err != nil {
panic(err)
}
}

Этот код сначала загружает шаблон из файла template.html, затем заполняет его данными из структуры Page и выводит результат в стандартный вывод.

Работа с формами

Обработка форм в веб-приложениях на Go выполняется с помощью пакета net/http. Рассмотрим пример простой формы и её обработки на стороне сервера.

Пример HTML-формы

<form action="/submit" method="post">
<label for="name">Имя:</label>
<input type="text" id="name" name="name">
<input type="submit" value="Отправить">
</form>

Обработка формы в Go

package main
import (
"fmt"
"net/http"
)
func formHandler(w http.ResponseWriter, r *http.Request) {
if err :=
r.ParseForm(); err != nil {
fmt.Fprintf(w, "ParseForm() err: %v", err)
return
}
fmt.Fprintf(w, "POST request successful\n")
name := r.FormValue("name")
fmt.Fprintf(w, "Name = %s\n", name)
}
func main() {
http.HandleFunc("/submit", formHandler)
http.ListenAndServe(":8080", nil)
}

В этом примере создается HTTP-сервер, который прослушивает POST-запросы по пути /submit и извлекает данные из формы, отправленной пользователем.

Шаблонизация и работа с формами — это фундаментальные аспекты создания веб-приложений. Go предоставляет мощные инструменты для их эффективной реализации. Используя пакет html/template, вы можете генерировать безопасный HTML, а с помощью net/http удобно обрабатывать данные форм. Эти знания помогут вам в создании динамичных и интерактивных веб-приложений на языке Go.