Kada izrađujete web stranicu, obično ćete dinamički generirati dio konačnog sadržaja. Zatim ćete htjeti ubaciti te podatke u svoje konačne web stranice za prikaz u pregledniku.

Možete uzeti jedan od dva pristupa: ugraditi strukturu svoje stranice u svoj program ili kombinirati konačne podatke s zasebnim datotekama predloška.

Izrada predložaka omogućuje odvajanje problema za bazu koda koja se lakše održava. Također olakšava dijeljenje front-end zadataka i back-end zadataka, dodjeljujući ih različitim članovima tima. Go ima izvrsnu podršku za izradu predložaka u svojoj standardnoj knjižnici.

Početak rada s predlošcima u Gou

Go ima dva paketa za izradu predložaka u standardnoj biblioteci: tekst/predložak i html/predložak. Paket text/template ima funkcionalnost za raščlanjivanje tekstualnih datoteka, dok html/template obrađuje HTML. Upotrebom html-a/predloška zaštićeni ste od napada skriptiranjem na više stranica (XSS) budući da Go izbjegava unos podataka tijekom renderiranja. Ovo je još jedna prednost izrade šablona u odnosu na ručni pristup.

instagram viewer

Budući da je paket predložaka dio standardne biblioteke, nećete morati instalirati nikakve ovisnosti; samo ga uvezi:

uvoz "html/predložak"

Počni od stvaranje HTML datoteke koristiti kao predložak za svoju aplikaciju. Možete koristiti standard .html produženje ili bilo koje .gohtml ili .tmpl, oboje su koji su također uobičajeni. Koje god proširenje koristili, funkcionalnost unutar tvoje aplikacije bit će ista. Neki uređivači teksta mogu primijeniti drugačije označavanje sintakse ovisno o proširenjima vaših predložaka. Evo osnovnog kostura:

<!DOCTYPE html>
<html lang="hr">
<glavu>
<meta charset="UTF-8">
<titula>Dokument</title>
</head>
<tijelo>

</body>
</html>

Spremite ovu datoteku u direktorij svog Go programa. Sada možete početi raditi s njim, kao predloškom, unutar vašeg programa.

Stvorite globalnu instancu Predložak metoda paketa predložaka. Ovoj instanci predloška pristupit ćete iz različitih dijelova svog programa.

var tmplt *predložak. Predložak

Morat ćete stvoriti jednostavan poslužitelj za renderiranje i prikaz vaših predložaka. Evo kako pokrenuti jednostavan poslužitelj u Gou pomoću net/http paket:

funkrunServer() {
http. HandleFunc("/home", handlePage)
pogriješiti := http. ListenAndServe("localhost:8080", nula)

ako pogriješiti != nula {
log. Fatalln("Došlo je do pogreške s poslužiteljem:", err)
}
}

Nazvat ćete runServer funkciju iz vaše glavne funkcije za pokretanje poslužitelja. Poslužitelj ima samo jednu rutu, /home route, koji će prikazati vašu stranicu. The handlePage parametar je naziv funkcije rukovatelja koja će prikazati vašu stranicu. The Slušajte i služite metoda pokreće poslužitelj koji sluša na portu 8080 na localhost, tj. vlastito računalo.

Prosljeđivanje varijabli u predloške

Stvorite globalnu strukturu pod nazivom Vijesti:

tip Vijesti strukturirati {
Naslov niz
Tijelo niz
}

Koristit ćete ovu strukturu za pohranjivanje podataka i prosljeđivanje u svoj predložak za prikaz na vašoj posljednjoj stranici. U svom predlošku zatim možete koristiti ovu sintaksu za ubacivanje podataka:

{{ Ime }}

Gdje Ime je naziv varijable koju ste proslijedili svom predlošku. Kada renderirate predložak, on će zamijeniti vrijednosti u zagradama s odgovarajućim podacima iz vašeg Go koda. Budući da će sljedeći primjer proslijediti strukturu, koristit ćete notaciju s točkama za pristup njezinim poljima:

<tijelo>
<h1>{{ .Naslov }}</h1>
<str> {{ .Tijelo }} </str>
</body>

Zamijenite prazan element tijela u kosturnom označavanju predloška gornjim kodom.

The handlePage funkcija rukovatelja će potvrditi da je zahtjev za stranicu GET zahtjev. Zatim popunjava strukturu oglednim podacima prije nego što renderira predložak i posluži završnu stranicu:

funkhandlePage(pisac http. ResponseWriter, zahtjev *http. Zahtjev) {
ako zahtjev. Metoda == "GET" {
tmplt, _ = predložak. ParseFiles("tutorial.html")

događaj := Vijesti{
Naslov: "makeuseof.com ima sve tehničko",
Tijelo: "Posjetite MUO za bilo što vezano uz tehnologiju",
}

pogriješiti := tmplt. Izvršiti (pisac, događaj)

ako pogriješiti != nula {
povratak
}
}
}

The ParseFiles metoda analizira HTML datoteku koju navedete. The događaj varijabla je inicijalizirana struktura. The Izvršiti Metoda će ubaciti dostavljene podatke u konačnu stranicu, prema rezerviranim mjestima u predlošku. Izvršenje traje a ResponseWriter a podaci, u ovom slučaju, struktura.

Ovo je rezultat pokretanja poslužitelja i posjete stranici:

Korištenje kontrolnih struktura u predlošcima

Također možete koristiti kontrolne strukture kao što su uvjetne izjave i petlje u svojim predlošcima.

Petlja vam omogućuje izlaz nekoliko vrijednosti i ponovno korištenje iste strukture za svaku. Koristiti domet ključna riječ za definiranje početka ponovljenog sadržaja i kraj ključna riječ za kraj. Unutar petlje možete koristiti {{.}} sintaksa za ubacivanje trenutne vrijednosti:


    {{domet .}}
  1. {{.}}

  2. {{kraj}}

Zatim ćete proslijediti naziv podatkovne strukture koju želite proći kroz petlju kao parametar metodi Execute:

makeUseOfCategories := []niz{"Objašnjenje tehnologije", "Programiranje", "Linux",
"Android", "iOS", "Mnogo više..."}

pogriješiti := tmplt. Izvrši (pisac, makeUseOfCategories)

ako pogriješiti != nula {
povratak
}

The makeUseOfCategories varijabla je isječak nizova koji se prosljeđuju kao parametar podataka. Evo rezultata prelaska kroz isječak:

Možete koristiti uvjetnu izjavu u svojim predlošcima za testiranje vrijednosti Booleove varijable. Stvorite strukturu s booleovim poljima, poput ove:

tip TrueFalser strukturirati {
Je istina bool
IsFalse bool
IsDefault bool
}

Za upotrebu uvjeta uključite ako ključna riječ u dvostrukim zagradama prije naziva varijable za testiranje. Završite uvjetni blok s kraj ključna riječ u zagradama:

{{if .IsTrue}}
<str>Ocjenjuje istinito i izlazi</str>
{{kraj}}

{{if .IsDefault}}
<str>Ocjenjuje netočno i pobijedio't izlaz</str>
{{kraj}}

{{if .IsFalse}}
<str>Ocjenjuje netočno i pobijedio't izlaz</str>
{{kraj}}

Inicijaliziranje strukture u Go postavlja vrijednosti na false prema zadanim postavkama, tako da ako ne inicijalizirate polje, ono se procjenjuje na false. Nakon inicijalizacije strukture i prosljeđivanja varijable kao podataka u predložak, samo polja koja imaju vrijednost true uzrokuju pojavljivanje izlaza.

izbor := TrueFalser {
Je istina: pravi,
IsFalse: lažno,
}

pogriješiti := tmplt. Izvršiti (pisac, izbor)

Konačni izlaz uključuje samo jedan odlomak jer samo polje isTrue daje vrijednost true:

Ne morate koristiti predloške za svoje pozadinske aplikacije

Predložak nije preduvjet za vaše Go aplikacije. Možete koristiti druge pristupe kao što je ugrađivanje vaše strukture stranice u vaš program, uz njegovu logiku i drugo ponašanje.

Međutim, na kraju ćete napraviti više posla za sebe. Go templating pomaže u sprječavanju XSS napada i olakšava odvajanje rada na strukturi stranice od pozadinske logike.