Veebisaidi loomisel loote osa lõplikust sisust tavaliselt dünaamiliselt. Seejärel soovite need andmed sisestada oma lõplikele veebilehtedele, et neid brauseris kuvada.
Võite kasutada ühte kahest lähenemisviisist: manustada oma lehe struktuur oma programmi või kombineerida lõplikud andmed eraldi mallifailidega.
Mallid eraldavad mured paremini hooldatava koodibaasi saamiseks. Samuti hõlbustab see esiotsa ja tagaotsa ülesannete jaotamist, jagades need erinevatele meeskonnaliikmetele. Go'l on standardses teegis suurepärane mallide tugi.
Mallide loomisega alustamine Go-s
Go-l on standardteegis kaks mallipaketti: tekst/mall ja html/mall. Teksti/malli paketil on funktsioonid tekstifailide sõelumiseks, HTML/malli aga käsitleb HTML-i. Html-i/malli kasutades olete kaitstud saidiülese skriptimise (XSS) rünnakute eest, kuna Go väldib renderdamise ajal andmesisestuse. See on malli loomise teine eelis manuaalse lähenemise ees.
Kuna mallipakett on osa standardteegist, ei pea te installima mingeid sõltuvusi; lihtsalt importige see:
importida "html/mall"
Alusta sellest HTML-faili loomine mida kasutada oma rakenduse mallina. Võite kasutada standardit .html pikendamine või kumbki .gohtml või .tmpl, mõlemad on samuti levinud. Ükskõik, millist laiendust te kasutate, on teie rakenduse funktsioonid samad. Mõned tekstiredaktorid võivad sõltuvalt teie mallide laienditest rakendada erinevat süntaksi esiletõstmist. Siin on põhiline skelett:
<!DOCTYPE html>
<html lang="et">
<pea>
<metamärgistik="UTF-8">
<pealkiri>Dokument</title>
</head>
<keha>
</body>
</html>
Salvestage see fail oma Go programmi kataloogi. Nüüd saate hakata sellega oma programmis mallina töötama.
Loo globaalne eksemplar Mall mallipaketi meetod. Sellele mallieksemplarile pääsete juurde oma programmi erinevatest osadest.
var tmplt *mall. Mall
Mallide renderdamiseks ja kuvamiseks peate looma lihtsa serveri. Siit saate teada, kuidas käivitada Go's lihtne server, kasutades net/http pakett:
funcrunServer() {
http. HandleFunc("/home", käepideleht)
viga := http. ListenAndServe("localhost:8080", null)
kui eks!= null {
logi. Fatalln("Serveris on viga:", viga)
}
}
Te helistate runServer põhifunktsioonist serveri käivitamiseks. Serveril on ainult üks marsruut, /home marsruut, mis kuvab teie lehe. The käepideleht parameeter on töötleja funktsiooni nimi, mis teie lehe renderdab. The Kuula ja teeninda meetod käivitab serveri pordi kuulamise 8080 peal localhost, st teie enda arvuti.
Muutujate edastamine mallidele
Looge globaalne struktuur nimega Uudised:
tüüp Uudised struktuur {
Pealkiri string
Keha string
}
Seda struktuuri kasutate andmete salvestamiseks ja oma mallile edastamiseks viimasel lehel kuvamiseks. Seejärel saate oma mallis andmete sisestamiseks kasutada järgmist süntaksit:
{{ nimi }}
Kus nimi on muutuja nimi, mille olete oma mallile edastanud. Malli renderdamisel asendab see sulgudes olevad väärtused vastavate andmetega teie Go-koodist. Kuna järgmine näide edastab struktuuri, kasutate selle väljadele juurdepääsuks punktimärki:
<keha>
<h1>{{ .Pealkiri }}</h1>
<lk> {{ .Keha }} </lk>
</body>
Asendage tühja kehaelement oma malli skeleti märgistuses ülaloleva koodiga.
The käepideleht käitleja funktsioon kontrollib, et lehe päring on GET-i päring. Seejärel täidab see struktuuri näidisandmetega enne malli renderdamist ja viimase lehe esitamist:
funckäepideleht(kirjanik http. ResponseWriter, päring *http. taotlus) {
kui nõuda. Meetod == "GET" {
tmplt, _ = mall. ParseFiles("tutorial.html")sündmus := Uudised{
Pealkiri: "makeuseof.com-il on kõik tehnikaga seotud",
Keha: "Külastage MUO-d jaoks kõik tehnoloogiaga seotud",
}viga := tmplt. Teostage (kirjanik, sündmus)
kui eks!= null {
tagasi
}
}
}
The ParseFiles meetod parsib teie määratud HTML-faili. The sündmus muutuja on initsialiseeritud struktuur. The Käivitage meetod sisestab esitatud andmed viimasele lehele vastavalt malli kohatäitjatele. Täitmine võtab a ResponseWriter ja andmed, antud juhul struktuur.
Siin on serveri käitamise ja lehe külastamise tulemus:
Juhtstruktuuride kasutamine mallides
Samuti saate mallides kasutada juhtstruktuure, nagu tingimuslauseid ja silmuseid.
Silmus võimaldab teil väljastada mitu väärtust ja kasutada igaühe jaoks sama struktuuri. Kasuta ulatus märksõna korduva sisu alguse ja lõpp märksõna lõpu jaoks. Silmuse sees saate kasutada {{.}} süntaks praeguse väärtuse sisestamiseks:
{{ulatus .}}
- {{.}}
{{lõpp}}
Seejärel edastate meetodi Execute parameetrina selle andmestruktuuri nime, mida soovite läbida:
makeUseOfCategories := []string{"Technology Explained", "Programming", "Linux",
"Android", "iOS", "Palju muud..."}viga := tmplt. Käivitage (kirjutaja, makeUseOfCategories)
kui eks!= null {
tagasi
}
The makeUseOfCategories muutuja on stringide osa, mis edastatakse andmeparameetrina. Siin on lõigu läbimise tulemus:
Tõeväärtuse muutuja väärtuse testimiseks saate oma mallides kasutada tingimuslauset. Looge tõeväärtuslike väljadega struktuur järgmiselt:
tüüp TrueFalser struktuur {
On tõsi bool
On False bool
IsDefault bool
}
Tingimuslikuks kasutamiseks lisage kui märksõna topeltsulgudes enne testitava muutuja nime. Lõpetage tingimusplokk tähega lõpp Märksõna sulgudes:
{{if .IsTrue}}
<lk>Hindab tõest ja annab tulemuse</lk>
{{lõpp}}{{if .IsDefault}}
<lk>Hindab valet ja võitis't väljund</lk>
{{lõpp}}
{{if .IsFalse}}
<lk>Hindab valet ja võitis't väljund</lk>
{{lõpp}}
Struktuuri lähtestamine rakenduses Go määrab vaikimisi väärtused false, nii et kui te välja ei initsialiseeri, hindab see väärtuseks Väär. Struktuuri lähtestamisel ja muutuja andmetena mallile edastamisel põhjustavad väljundi ilmumise ainult need väljad, mille väärtus on tõene.
valik := TrueFalser {
On tõsi: tõsi,
On False: vale,
}
viga := tmplt. Teostage (kirjanik, valik)
Lõplik väljund sisaldab ainult ühte lõiku, kuna ainult väli isTrue hindab tõeseks:
Te ei pea oma taustarakenduste jaoks malle kasutama
Mall ei ole teie Go rakenduste jaoks nõutav. Lisaks selle loogikale ja muule käitumisele saate kasutada ka muid lähenemisviise, näiteks lehe struktuuri manustamist oma programmi.
Siiski teete lõpuks enda jaoks rohkem tööd. Go mallimine aitab vältida XSS-i rünnakuid ja hõlbustab lehe struktuuriga seotud töö eraldamist taustaloogikast.