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.

instagram viewer

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 .}}
  1. {{.}}

  2. {{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.