Kai kuriate svetainę, dalį galutinio turinio paprastai generuosite dinamiškai. Tada norėsite įterpti šiuos duomenis į savo galutinius tinklalapius, kad jie būtų rodomi naršyklėje.

Galite pasirinkti vieną iš dviejų būdų: įterpti puslapio struktūrą į programą arba sujungti galutinius duomenis su atskirais šablonų failais.

Šablonai leidžia atskirti rūpimus klausimus, kad būtų lengviau prižiūrima kodų bazė. Taip pat lengviau padalinti priekines ir galines užduotis, paskirstant jas skirtingiems komandos nariams. Go turi puikų šablonų palaikymą savo standartinėje bibliotekoje.

Darbo su šablonais „Go“ pradžia

Go turi du šablonų paketus standartinėje bibliotekoje: tekstas/šablonas ir html/šablonas. Teksto / šablono paketas turi tekstinių failų analizavimo funkciją, o html / šablonas tvarko HTML. Naudodami html / šabloną esate apsaugoti nuo scenarijų tarp svetainių (XSS) atakų, nes „Go“ nepateikia duomenų įvedimo metu. Tai dar vienas šablono pranašumas, palyginti su rankiniu būdu.

Kadangi šablono paketas yra standartinės bibliotekos dalis, jums nereikės diegti jokių priklausomybių; tiesiog importuokite:

instagram viewer

importuoti "html/šablonas"

Pradėkite nuo HTML failo kūrimas naudoti kaip savo programos šabloną. Galite naudoti standartą .html pratęsimas arba bet kuri kita .gohtml arba .tmpl, abu taip pat yra įprasti. Kad ir kokį plėtinį naudotumėte, programos funkcijos bus tokios pačios. Kai kurios teksto rengyklės gali taikyti skirtingą sintaksės paryškinimą, atsižvelgiant į jūsų šablonų plėtinius. Štai pagrindinis skeletas:

<!DOCTYPE html>
<html lang="lt">
<galva>
<meta simbolių rinkinys ="UTF-8">
<titulą>dokumentas</title>
</head>
<kūnas>

</body>
</html>

Išsaugokite šį failą savo Go programos kataloge. Dabar galite pradėti dirbti su juo kaip šablonu savo programoje.

Sukurkite visuotinį egzempliorių Šablonas šablono paketo metodas. Šį šablono egzempliorių pasieksite iš įvairių programos dalių.

var tmplt *šablonas. Šablonas

Turėsite sukurti paprastą serverį, kad galėtumėte pateikti ir rodyti savo šablonus. Štai kaip paleisti paprastą serverį Go naudojant net/http paketas:

funcRunServer() {
http. HandleFunc ("/home", rankenaPuslapis)
klaida := http. ListenAndServe("localhost:8080", nulis)

jeigu klysta! = nulis {
žurnalas. Fatalln("Serveryje įvyko klaida:", klaida)
}
}

Jūs paskambinsite RunServer funkcija iš pagrindinės funkcijos, kad paleistumėte serverį. Serveris turi tik vieną maršrutą, /home maršrutą, kuriame bus rodomas jūsų puslapis. The rankenaPuslapis parametras yra tvarkyklės funkcijos, kuri pateiks jūsų puslapį, pavadinimas. The KlausykIr Tarnaukite metodas pradeda serverio klausytis prievade 8080 įjungta localhost, ty savo kompiuterį.

Kintamųjų perdavimas šablonams

Sukurkite visuotinę struktūrą pavadinimu žinios:

tipo žinios struktūra {
Antraštė styga
kūnas styga
}

Šią struktūrą naudosite duomenims saugoti ir perduoti į šabloną, kad būtų rodomas galutiniame puslapyje. Savo šablone galite naudoti šią sintaksę duomenims įterpti:

{{ vardas }}

Kur vardas yra kintamojo, kurį perdavėte į šabloną, pavadinimas. Kai pateikiate šabloną, jis pakeis skliaustuose esančias vertes atitinkamais duomenimis iš jūsų „Go“ kodo. Kadangi šis pavyzdys perduos struktūrą, norėdami pasiekti jos laukus, naudosite taškų žymėjimą:

<kūnas>
<h1>{{ .Antraštė }}</h1>
<p> {{ .Kūnas }} </p>
</body>

Pakeiskite tuščią kūno elementą šablono skeleto žymėjime aukščiau pateiktu kodu.

The rankenaPuslapis tvarkyklės funkcija patikrins, ar puslapio užklausa yra GET užklausa. Tada ji užpildo struktūrą duomenų pavyzdžiais prieš pateikdama šabloną ir pateikdama galutinį puslapį:

funcrankenaPuslapis(rašytojas http. ResponseWriter, užklausa *http. užklausa) {
jeigu prašymas. Metodas == "GAUTI" {
tmplt, _ = šablonas. ParseFiles("tutorial.html")

renginys := Naujienos{
Antraštė: "makeuseof.com yra viskas, kas reikalinga",
Kūnas: „Aplankykite MUO dėl viskas, kas susiję su technologijomis“,
}

klaida := tmplt. Vykdyti (rašytojas, renginys)

jeigu klysta! = nulis {
grąžinti
}
}
}

The ParseFiles metodas analizuoja jūsų nurodytą HTML failą. The renginys kintamasis yra inicijuota struktūra. The Vykdyti metodas įterps pateiktus duomenis į galutinį puslapį pagal šablone esančias vietos žymas. Vykdyti reikia a ResponseWriter ir duomenys, šiuo atveju – struktūra.

Štai serverio paleidimo ir apsilankymo puslapyje rezultatas:

Valdymo struktūrų naudojimas šablonuose

Taip pat šablonuose galite naudoti valdymo struktūras, pvz., sąlyginius sakinius ir kilpas.

Ciklas leidžia išvesti kelias reikšmes ir kiekvienai iš naujo naudoti tą pačią struktūrą. Naudoti diapazonas raktinis žodis, skirtas apibrėžti pasikartojančio turinio pradžią ir pabaiga pabaigos raktažodis. Ciklo viduje galite naudoti {{.}} sintaksė dabartinei vertei įvesti:


    {{diapazonas .}}
  1. {{.}}

  2. {{pabaiga}}

Tada duomenų struktūros, kurią norite pereiti, pavadinimą kaip parametrą vykdymo metodui perduosite:

makeUseOfCategories := []styga{"Paaiškinta technologija", "Programavimas", "Linux",
„Android“, „iOS“, „daug daugiau...“}

klaida := tmplt. Vykdyti (rašytojas, makeUseOfCategories)

jeigu klysta! = nulis {
grąžinti
}

The makeUseOfCategories kintamasis yra eilučių dalis, kurią reikia perduoti kaip duomenų parametrą. Štai ciklo perpjovimo rezultatas:

Galite naudoti sąlyginį sakinį savo šablonuose, kad patikrintumėte loginio kintamojo reikšmę. Sukurkite struktūrą su loginiais laukais, pavyzdžiui:

tipo TrueFalser struktūra {
Tiesa bool
Yra klaidinga bool
IsDefault bool
}

Norėdami naudoti sąlyginį, įtraukite jeigu raktinis žodis dvigubuose skliaustuose prieš tikrinamo kintamojo pavadinimą. Užbaikite sąlyginį bloką su pabaiga raktinis žodis skliausteliuose:

{{if .IsTrue}}
<p>Vertina tiesa ir išduoda</p>
{{pabaiga}}

{{if .IsDefault}}
<p>Vertina klaidingai ir laimėjo't išvestis</p>
{{pabaiga}}

{{if .IsFalse}}
<p>Vertina klaidingai ir laimėjo't išvestis</p>
{{pabaiga}}

Inicijuojus struktūrą programoje Go, numatytosios vertės nustatomos į false, taigi, jei nepainicijuosite lauko, jis įvertins kaip false. Inicijuojant struktūrą ir perduodant kintamąjį kaip duomenis į šabloną, išvestis rodomi tik tie laukai, kurie vertinami kaip tiesa.

pasirinkimas := TrueFalser {
Tiesa: tiesa,
Ar klaidinga: klaidinga,
}

klaida := tmplt. Vykdyti (rašytojas, pasirinkimas)

Galutinėje išvestyje yra tik viena pastraipa, nes tik laukas isTrue vertinamas kaip tiesa:

Jums nereikia naudoti šablonų savo foninėms programoms

Šablonas nėra būtinas jūsų „Go“ programoms. Galite naudoti kitus metodus, pvz., puslapio struktūros įterpimą į programą, kartu su jos logika ir kita veikla.

Tačiau galiausiai padarysite daugiau darbo sau. „Go“ šablonų naudojimas padeda išvengti XSS atakų ir palengvina puslapio struktūros darbą atskirti nuo užpakalinės sistemos logikos.