Когато изграждате уебсайт, обикновено ще генерирате част от окончателното си съдържание динамично. След това ще искате да инжектирате тези данни в окончателните си уеб страници за показване в браузър.

Можете да използвате един от двата подхода: да вградите структурата на страницата си в програмата си или да комбинирате окончателните си данни с отделни шаблонни файлове.

Шаблоните осигуряват разделяне на проблемите за по-поддържана кодова база. Освен това улеснява разделянето на задачи от предния край и задните задачи, като ги разпределя на различни членове на екипа. Go има отлична поддръжка за шаблони в стандартната си библиотека.

Първи стъпки с шаблони в Go

Go има два пакета за шаблони в стандартната библиотека: текст/шаблон и html/шаблон. Пакетът text/template има функционалност за анализиране на текстови файлове, докато html/template обработва HTML. Като използвате html/шаблон, вие сте защитени от атаки на междусайтов скрипт (XSS), тъй като Go избягва въвеждането на данни по време на рендиране. Това е друго предимство на шаблоните пред ръчния подход.

instagram viewer

Тъй като шаблонният пакет е част от стандартната библиотека, няма да е необходимо да инсталирате никакви зависимости; просто го импортирайте:

импортиране "html/шаблон"

Започнете от създаване на HTML файл да използвате като шаблон за вашето приложение. Можете да използвате стандарта .html разширение или едно от двете .gohtml или .tmpl, и двете са, които също са често срещани. Каквото и разширение да използвате, функционалността във вашето приложение ще бъде същата. Някои текстови редактори може да прилагат различно осветяване на синтаксиса в зависимост от разширенията на вашите шаблони. Ето един основен скелет:

<!DOCTYPE html>
<html lang="en">
<глава>
<мета charset="UTF-8">
<заглавие>Документ</title>
</head>
<тяло>

</body>
</html>

Запазете този файл в директорията на програмата Go. Вече можете да започнете да работите с него като шаблон във вашата програма.

Създайте глобален екземпляр на Шаблон метод на шаблонния пакет. Ще имате достъп до този екземпляр на шаблон от различни части на вашата програма.

вар tmplt *шаблон. Шаблон

Ще трябва да създадете прост сървър за изобразяване и показване на вашите шаблони. Ето как да стартирате прост сървър в Go, като използвате net/http пакет:

функrunServer() {
http. HandleFunc("/home", handlePage)
грешка := http. ListenAndServe("localhost:8080", нула)

ако грешка!= нула {
дневник. Fatalln("Има грешка със сървъра:", err)
}
}

Ще се обадите на runServer функция от вашата основна функция за стартиране на сървъра. Сървърът има само един маршрут, the /home маршрут, който ще покаже вашата страница. The handlePage параметърът е името на манипулираща функция, която ще визуализира вашата страница. The ListenAndServe метод стартира сървъра, който слуша на порт 8080 На localhost, т.е. вашият собствен компютър.

Предаване на променливи към шаблони

Създайте глобална структура с име Новини:

Тип Новини структура {
Заглавие низ
Тяло низ
}

Ще използвате тази структура, за да съхранявате данни и да ги предавате на вашия шаблон за показване на последната ви страница. След това във вашия шаблон можете да използвате този синтаксис, за да инжектирате данни:

{{ име }}

Където име е името на променлива, която сте предали на вашия шаблон. Когато изобразите шаблона, той ще замени стойностите в скоби със съответните данни от вашия Go код. Тъй като следният пример ще предаде структура, ще използвате нотация с точка за достъп до нейните полета:

<тяло>
<h1>{{ .Заглавие }}</h1>
<стр> {{ .Body }} </стр>
</body>

Заменете празния елемент body в маркирането на скелета на вашия шаблон с кода по-горе.

The handlePage функцията за обработка ще провери дали заявката за страницата е GET заявка. След това попълва структура с примерни данни, преди да изобрази шаблона и да обслужи последната страница:

функhandlePage(автор http. ResponseWriter, заявка *http. Заявка) {
ако искане. Метод == "GET" {
tmplt, _ = шаблон. ParseFiles("урок.html")

събитие := Новини{
Заглавие: „makeuseof.com има всичко техническо“,
Тяло: „Посетете MUO за всичко свързано с технологиите",
}

грешка := tmplt. Изпълнение (автор, събитие)

ако грешка!= нула {
връщане
}
}
}

The ParseFiles метод анализира посочения от вас HTML файл. The събитие променлива е инициализираната структура. The Изпълни Методът ще инжектира предоставените данни в крайната страница, според контейнерите в шаблона. Изпълнението отнема a ResponseWriter и данните, в този случай, структурата.

Ето резултата от стартирането на сървъра и посещението на страницата:

Използване на контролни структури в шаблони

Можете също да използвате контролни структури като условни изрази и цикли във вашите шаблони.

Цикълът ви позволява да изведете няколко стойности и да използвате повторно същата структура за всяка. Използвай диапазон ключова дума за определяне на началото на повтарящото се съдържание и край ключова дума за края. В рамките на цикъла можете да използвате {{.}} синтаксис за инжектиране на текущата стойност:


    {{диапазон .}}
  1. {{.}}

  2. {{край}}

След това ще предадете името на структурата от данни, през която искате да преминете като параметър към метода Execute:

makeUseOfCategories := []низ{„Обяснена технология“, „Програмиране“, „Линукс“,
„Android“, „iOS“, „Много други...“}

грешка := tmplt. Изпълнение (писец, makeUseOfCategories)

ако грешка!= нула {
връщане
}

The makeUseOfCategories променливата е част от низове, които да бъдат предадени като параметър за данни. Ето резултата от преминаването през среза:

Можете да използвате условен израз във вашите шаблони, за да тествате стойността на булева променлива. Създайте структура с булеви полета, като тази:

Тип TrueFalser структура {
Истина е bool
IsFalse bool
По подразбиране bool
}

За да използвате условно условие, включете ако ключова дума в двойни скоби преди името на променливата за тестване. Завършете условния блок с край ключова дума в скоби:

{{if .IsTrue}}
<стр>Оценява вярно и ще изведе</стр>
{{край}}

{{if .IsDefault}}
<стр>Оценява false и печели't изход</стр>
{{край}}

{{if .IsFalse}}
<стр>Оценява false и печели't изход</стр>
{{край}}

Инициализирането на структура в Go задава стойностите на false по подразбиране, така че ако не инициализирате поле, то се оценява на false. При инициализиране на структурата и предаване на променливата като данни към шаблона, само полетата, които оценяват като true, причиняват изхода да се появи.

избор := TrueFalser {
Истина е: вярно,
IsFalse: невярно,
}

грешка := tmplt. Изпълнение (автор, избор)

Крайният изход включва само един абзац, тъй като само полето isTrue се оценява на true:

Не е нужно да използвате шаблони за вашите бекенд приложения

Създаването на шаблони не е изискване за вашите приложения Go. Можете да използвате други подходи като вграждане на структурата на вашата страница във вашата програма, заедно с нейната логика и друго поведение.

В крайна сметка обаче ще свършите повече работа за себе си. Go templating помага за предотвратяване на XSS атаки и улеснява отделянето на работата върху структурата на страницата от логиката на бекенда.