Když vytváříte webové stránky, obvykle generujete část svého konečného obsahu dynamicky. Tato data pak budete chtít vložit do svých konečných webových stránek, které se zobrazí v prohlížeči.
Můžete použít jeden ze dvou přístupů: vložit strukturu stránky do programu nebo zkombinovat konečná data se samostatnými soubory šablon.
Templating poskytuje oddělení zájmů pro lépe udržovatelnou kódovou základnu. Usnadňuje také rozdělení front-endových a back-endových úloh a jejich přidělování různým členům týmu. Go má ve své standardní knihovně vynikající podporu šablon.
Začínáme s šablonováním v Go
Go má ve standardní knihovně dva balíčky šablon: text/šablona a html/šablona. Balíček text/template má funkci pro analýzu textových souborů, zatímco html/template zpracovává HTML. Použitím html/template jste chráněni před útoky cross-site scripting (XSS), protože Go unikne zadávání dat během vykreslování. To je další výhoda šablony oproti ručnímu přístupu.
Protože je balíček šablon součástí standardní knihovny, nebudete muset instalovat žádné závislosti; stačí importovat:
import "html/šablona"
Začněte tím vytvoření souboru HTML použít jako šablonu pro vaši aplikaci. Můžete použít standard .html prodloužení nebo buď .gohtml nebo .tmpl, oba jsou také společné. Ať už použijete jakékoli rozšíření, funkce ve vaší aplikaci budou stejné. Některé textové editory mohou používat různé zvýraznění syntaxe v závislosti na rozšířeních vašich šablon. Zde je základní kostra:
<!DOCTYPE html>
<html jazyk="en">
<hlava>
<meta znaková sada="UTF-8">
<titul>Dokument</title>
</head>
<tělo>
</body>
</html>
Uložte tento soubor do adresáře programu Go. Nyní s ním můžete začít pracovat jako se šablonou ve vašem programu.
Vytvořte globální instanci souboru Šablona metoda balíčku šablon. K této instanci šablony budete přistupovat z různých částí vašeho programu.
var tmplt *šablona. Šablona
Pro vykreslení a zobrazení šablon budete muset vytvořit jednoduchý server. Zde je návod, jak spustit jednoduchý server v Go pomocí net/http balík:
funcrunServer() {
http. HandleFunc("/home", handlePage)
chyba := http. ListenAndServe("localhost:8080", nula)
-li chyba!= nula {
log. Fatalln("Došlo k chybě serveru:", err)
}
}
Zavoláte na runServer z hlavní funkce pro spuštění serveru. Server má pouze jednu cestu, /home trasu, která zobrazí vaši stránku. The handlePage parametr je název funkce obsluhy, která vykreslí vaši stránku. The ListenAndServe metoda spustí server naslouchající na portu 8080 na localhost, tedy váš vlastní počítač.
Předávání proměnných do šablon
Vytvořte globální strukturu s názvem Zprávy:
typ Zprávy strukturovat {
Titulek tětiva
Tělo tětiva
}
Tuto strukturu použijete k uložení dat a jejich předání do šablony pro zobrazení na vaší poslední stránce. Ve své šabloně pak můžete použít tuto syntaxi k vložení dat:
{{ název }}
Kde název je název proměnné, kterou jste předali do šablony. Když šablonu vykreslíte, nahradí hodnoty ve složených závorkách odpovídajícími daty z vašeho kódu Go. Vzhledem k tomu, že následující příklad předá strukturu, použijete pro přístup k jejím polím tečkovou notaci:
<tělo>
<h1>{{ .Headline}}</h1>
<p> {{ .Body }} </str>
</body>
Nahraďte prázdný prvek těla v označení kostry vaší šablony výše uvedeným kódem.
The handlePage funkce handler ověří, že požadavek na stránku je požadavek GET. Poté vyplní strukturu vzorovými daty před vykreslením šablony a zobrazením poslední stránky:
funchandlePage(spisovatel http. ResponseWriter, požadavek *http. Žádost) {
-li žádost. Metoda == "GET" {
tmplt, _ = šablona. ParseFiles("tutorial.html")událost := Novinky{
Titulek: "makeuseof.com má všechno technické",
Tělo: „Navštivte MUO pro cokoliv souvisejícího s technologií",
}chyba := tmplt. Provést (spisovatel, událost)
-li chyba!= nula {
vrátit se
}
}
}
The ParseFiles metoda analyzuje soubor HTML, který určíte. The událost proměnná je inicializovaná struktura. The Vykonat metoda vloží dodaná data na konečnou stránku podle zástupných symbolů v šabloně. Provedení trvá a ResponseWriter a data, v tomto případě struct.
Zde je výsledek ze spuštění serveru a návštěvy stránky:
Použití řídicích struktur v šablonách
Ve svých šablonách můžete také použít řídicí struktury, jako jsou podmíněné příkazy a smyčky.
Smyčka vám umožňuje vydat několik hodnot a pro každou znovu použít stejnou strukturu. Použijte rozsah klíčové slovo pro definování začátku opakovaného obsahu a konec klíčové slovo na konec. V rámci smyčky můžete použít {{.}} syntaxe pro vložení aktuální hodnoty:
{{rozsah .}}
- {{.}}
{{konec}}
Poté předáte název datové struktury, kterou chcete procházet, jako parametr metodě Execute:
makeUseOfCategories := []tětiva{"Vysvětlení technologie", "Programování", "Linux",
"Android", "iOS", "Mnoho dalších..."}chyba := tmplt. Provést (spisovatel, makeUseOfCategories)
-li chyba!= nula {
vrátit se
}
The makeUseOfCategories proměnná je část řetězců, která se má předat jako datový parametr. Zde je výsledek procházení řezem:
K otestování hodnoty booleovské proměnné můžete ve svých šablonách použít podmíněný příkaz. Vytvořte strukturu s booleovskými poli, jako je tato:
typ TrueFalser strukturovat {
Je pravda bool
IsFalse bool
IsDefault bool
}
Chcete-li použít podmínku, zahrňte -li klíčové slovo ve dvojitých závorkách před názvem proměnné, která se má testovat. Ukončete podmíněný blok pomocí konec klíčové slovo ve složených závorkách:
{{if .IsTrue}}
<p>Hodnotí true a bude výstup</str>
{{konec}}{{if .IsDefault}}
<p>Hodnotí false a vyhrál't výstup</str>
{{konec}}
{{if .IsFalse}}
<p>Hodnotí false a vyhrál't výstup</str>
{{konec}}
Inicializace struktury v Go nastaví hodnoty ve výchozím nastavení na false, takže pokud neinicializujete pole, vyhodnotí se jako false. Při inicializaci struktury a předání proměnné jako dat do šablony způsobí zobrazení výstupu pouze pole, která se vyhodnotí jako true.
volba := TrueFalser {
Je pravda: skutečný,
IsFalse: Nepravdivé,
}
chyba := tmplt. Provést (spisovatel, výběr)
Konečný výstup obsahuje pouze jeden odstavec, protože pouze pole isTrue má hodnotu true:
Pro své backendové aplikace nemusíte používat šablony
Šablony nejsou pro vaše aplikace Go požadavkem. Můžete použít jiné přístupy, jako je vložení struktury stránky do vašeho programu, spolu s jeho logikou a dalším chováním.
Nakonec si však uděláte více práce pro sebe. Go templating pomáhá předcházet útokům XSS a usnadňuje oddělení práce na struktuře stránky od backendové logiky.