Amikor webhelyet készít, a végső tartalom egy részét általában dinamikusan hozza létre. Ezután be kell illesztenie ezeket az adatokat a végső weboldalaiba, hogy megjelenjen a böngészőben.
Kétféle megközelítés közül választhat: beágyazhatja az oldalszerkezetet a programba, vagy kombinálhatja a végső adatokat különálló sablonfájlokkal.
A sablonok lehetővé teszik a problémák elkülönítését egy karbantarthatóbb kódbázis érdekében. Ezenkívül megkönnyíti az előtér- és a háttérfeladatok felosztását, és azokat a csapat különböző tagjaihoz rendeli hozzá. A Go kiváló sablontámogatással rendelkezik a szabványos könyvtárában.
Kezdő lépések a sablonozással a Go-ban
A Go két sabloncsomagot tartalmaz a szabványos könyvtárban: szöveg/sablon és html/sablon. A szöveg/sablon csomag szövegfájlok elemzésére alkalmas, míg a html/template a HTML-t kezeli. A html/sablon használatával védve lesz a webhelyek közötti szkriptelési (XSS) támadásoktól, mivel a Go a megjelenítés során elkerüli az adatbevitelt. Ez a sablonozás másik előnye a kézi megközelítéssel szemben.
Mivel a sabloncsomag a szabványos könyvtár része, nem kell semmilyen függőséget telepítenie; csak importálja:
import "html/sablon"
Kezdje ezzel HTML fájl létrehozása sablonként használni az alkalmazáshoz. Használhatja a szabványt .html hosszabbítás vagy bármelyik .gohtml vagy .tmpl, mindkettő szintén gyakori. Bármelyik kiterjesztést is használja, az alkalmazáson belüli funkcionalitás ugyanaz lesz. Egyes szövegszerkesztők eltérő szintaxiskiemelést alkalmazhatnak a sablonok bővítményeitől függően. Íme egy alapváz:
<!DOCTYPE html>
<html lang="hu">
<fej>
<meta karakterkészlet="UTF-8">
<cím>Dokumentum</title>
</head>
<test>
</body>
</html>
Mentse el ezt a fájlt a Go program könyvtárába. Most elkezdhet dolgozni vele, mint sablon, a programon belül.
Hozzon létre egy globális példányt a Sablon a sabloncsomag módszere. Ezt a sablonpéldányt a program különböző részeiből érheti el.
var tmplt *sablon. Sablon
Létre kell hoznia egy egyszerű szervert a sablonok rendereléséhez és megjelenítéséhez. Így indíthat el egy egyszerű szervert a Go alkalmazásban a net/http csomag:
funcrunServer() {
http. HandleFunc("/home", handlePage)
hiba := http. ListenAndServe("localhost:8080", nulla)
ha hiba! = nulla {
log. Fatalln("Hiba történt a szerverrel:", hiba)
}
}
Felhívod a runServer funkciót a fő funkcióból a szerver elindításához. A szervernek csak egy útvonala van, a /home útvonalat, amely megjeleníti az Ön oldalát. Az handlePage A paraméter egy kezelő függvény neve, amely megjeleníti az oldalt. Az ListenAndServe metódus elindítja a szerver figyelését a porton 8080 tovább localhost, azaz a saját számítógéped.
Változók átadása sablonoknak
Hozzon létre egy globális struktúrát, melynek neve hírek:
típus hírek struct {
Címsor húr
Test húr
}
Ezzel a struktúrával adatokat tárolhat, és átadhatja a sablonnak, hogy megjelenjen az utolsó oldalon. A sablonban ezt a szintaxist használhatja adatok beszúrására:
{{ név }}
Ahol név a sablonnak átadott változó neve. Amikor előállítja a sablont, az lecseréli a kapcsos zárójelben lévő értékeket a Go kód megfelelő adataira. Mivel a következő példa átad egy struktúrát, a mezőihez pontjelölést kell használni:
<test>
<h1>{{ .Címsor }}</h1>
<p> {{ .Body }} </p>
</body>
Cserélje ki az üres body elemet a sablon csontváz jelölésében a fenti kóddal.
Az handlePage kezelő funkció ellenőrzi, hogy az oldal kérése GET kérés-e. Ezután feltölt egy struktúrát mintaadatokkal, mielőtt megjeleníti a sablont és megjeleníti az utolsó oldalt:
funchandlePage(író http. ResponseWriter, kérje a *http. Kérés) {
ha kérés. Method == "GET" {
tmplt, _ = sablon. ParseFiles("tutorial.html")esemény := Hírek{
Címsor: "a makeuseof.com-on minden megtalálható, ami tech",
Törzs: "Látogassa meg a MUO-t számára bármi, ami technológiával kapcsolatos",
}hiba := tmplt. Végrehajtás (író, esemény)
ha hiba! = nulla {
Visszatérés
}
}
}
Az ParseFiles metódus elemzi a megadott HTML-fájlt. Az esemény változó az inicializált struktúra. Az Végrehajtás metódus beszúrja a megadott adatokat az utolsó oldalra, a sablonban lévő helyőrzőknek megfelelően. A végrehajtáshoz a ResponseWriter és az adatok, jelen esetben a struktúra.
Íme a szerver futtatásának és az oldal meglátogatásának eredménye:
Vezérlőszerkezetek használata sablonokban
A sablonokban vezérlőstruktúrákat is használhat, például feltételes utasításokat és ciklusokat.
A hurok lehetővé teszi több érték kiadását, és mindegyikhez ugyanazt a struktúrát. Használja a hatótávolság kulcsszó az ismétlődő tartalom kezdetének és a vége kulcsszó a végére. A hurkon belül használhatja a {{.}} szintaxis az aktuális érték beillesztéséhez:
{{hatótávolság .}}
- {{.}}
{{end}}
Ezután át kell adnia annak az adatszerkezetnek a nevét, amelyen át szeretne lépni paraméterként az Execute metódusnak:
makeUseOfCategories := []húr{"Technology Explained", "Programming", "Linux",
"Android", "iOS", "Sok más..."}hiba := tmplt. Végrehajtás (író, makeUseOfCategories)
ha hiba! = nulla {
Visszatérés
}
Az makeUseOfCategories A változó az adatparaméterként átadandó karakterláncok szelete. Íme a szeleten való átpörgetés eredménye:
Használhat feltételes utasítást a sablonokban egy logikai változó értékének tesztelésére. Hozzon létre egy struktúrát logikai mezőkkel, például:
típus TrueFalser struct {
Igaz bool
Hamis bool
IsDefault bool
}
Feltételes használatához adja meg a ha kulcsszó dupla kapcsos zárójelben a tesztelendő változó neve előtt. Fejezd be a feltételes blokkot a vége kulcsszó a kapcsos zárójelben:
{{if .IsTrue}}
<p>Kiértékeli az igazat és kimenetet ad</p>
{{end}}{{if .IsDefault}}
<p>Értékeli hamis és nyert't kimenet</p>
{{end}}
{{if .IsFalse}}
<p>Értékeli hamis és nyert't kimenet</p>
{{end}}
A struktúra inicializálása a Go programban alapértelmezés szerint false értékre állítja be az értékeket, így ha nem inicializál egy mezőt, akkor a kiértékelés hamis lesz. A struktúra inicializálásakor és a változónak a sablonba való adatként való átadásakor csak azok a mezők jelennek meg, amelyek igaznak értékelik a kimenetet.
választás := TrueFalser {
Igaz: igaz,
Hamis: hamis,
}
hiba := tmplt. Végrehajtás (író, választás)
A végső kimenet mindössze egyetlen bekezdést tartalmaz, mivel csak az isTrue mező értéke igaz:
Nem kell sablonokat használnia háttéralkalmazásaihoz
A sablonok használata nem követelmény a Go-alkalmazásokhoz. Más megközelítéseket is használhat, például beágyazhatja az oldal szerkezetét a programba, annak logikája és egyéb viselkedése mellett.
Azonban a végén még többet fogsz dolgozni magadnak. A Go sablon segít megelőzni az XSS-támadásokat, és megkönnyíti az oldalszerkezettel kapcsolatos munka és a háttérlogika szétválasztását.