Veidojot vietni, daļa no gala satura parasti tiek ģenerēta dinamiski. Pēc tam šos datus vēlēsities ievadīt savās galīgajās tīmekļa lapās, lai tās parādītu pārlūkprogrammā.
Varat izmantot vienu no divām pieejām: iegult lapas struktūru programmā vai apvienot galīgos datus ar atsevišķiem veidņu failiem.
Veidņu veidošana nodrošina rūpīgāku koda bāzi nošķiršanu. Tas arī atvieglo priekšgala uzdevumu un aizmugures uzdevumu sadalīšanu, piešķirot tos dažādiem komandas locekļiem. Go ir lielisks veidņu atbalsts savā standarta bibliotēkā.
Darba sākšana ar veidņu izmantošanu pakalpojumā Go
Go standarta bibliotēkā ir divas veidņu pakotnes: teksts/veidne un html/veidne. Teksta/veidnes pakotnei ir funkcionalitāte teksta failu parsēšanai, savukārt html/veidne apstrādā HTML. Izmantojot html/veidni, jūs esat pasargāts no starpvietņu skriptēšanas (XSS) uzbrukumiem, jo Go izvairās no datu ievades renderēšanas laikā. Šī ir vēl viena veidņu priekšrocība salīdzinājumā ar manuālo pieeju.
Tā kā veidņu pakotne ir daļa no standarta bibliotēkas, jums nav jāinstalē nekādas atkarības; vienkārši importējiet to:
imports "html/veidne"
Sāciet ar HTML faila izveide izmantot kā veidni savai lietojumprogrammai. Varat izmantot standartu .html pagarinājums vai kāds cits .gohtml vai .tmpl, abi ir arī izplatīti. Neatkarīgi no izmantotā paplašinājuma jūsu lietojumprogrammas funkcionalitāte būs tāda pati. Daži teksta redaktori var lietot atšķirīgu sintakses izcelšanu atkarībā no jūsu veidņu paplašinājumiem. Šeit ir pamata skelets:
<!DOCTYPE html>
<html lang="lv">
<galvu>
<meta rakstzīmju kopa ="UTF-8">
<virsraksts>Dokuments</title>
</head>
<ķermenis>
</body>
</html>
Saglabājiet šo failu savas Go programmas direktorijā. Tagad varat sākt strādāt ar to kā veidni savā programmā.
Izveidojiet globālu gadījumu Veidne veidņu pakotnes metode. Šai veidnes instancei piekļūsit no dažādām programmas daļām.
var tmplt * veidne. Veidne
Lai renderētu un parādītu veidnes, jums būs jāizveido vienkāršs serveris. Lūk, kā palaist vienkāršu serveri pakalpojumā Go, izmantojot net/http iepakojums:
funcrunServer() {
http. HandleFunc("/mājas", roktura lapa)
kļūda := http. ListenAndServe("localhost:8080", nulle)
ja kļūda! = nulle {
žurnāls. Fatalln("Serverī radās kļūda:", kļūda)
}
}
Jūs piezvanīsiet uz runServer funkciju no savas galvenās funkcijas, lai palaistu serveri. Serverim ir tikai viens maršruts, /home maršruts, kurā tiks parādīta jūsu lapa. The roktura lapa parametrs ir apdarinātāja funkcijas nosaukums, kas atveidos jūsu lapu. The Klausieties un kalpojiet metode sāk serveri klausīties portā 8080 ieslēgts localhost, t.i., jūsu dators.
Mainīgo nodošana veidnēm
Izveidojiet globālu struktūru ar nosaukumu Jaunumi:
veids Jaunumi struktūra {
Virsraksts virkne
Ķermenis virkne
}
Jūs izmantosit šo struktūru, lai saglabātu datus un nodotu tos savai veidnei, lai to parādītu pēdējā lapā. Savā veidnē varat izmantot šo sintaksi, lai ievadītu datus:
{{ vārds }}
Kur nosaukums ir mainīgā nosaukums, kuru esat nodevis savai veidnei. Kad jūs renderējat veidni, tā aizstās iekavās esošās vērtības ar atbilstošiem datiem no jūsu Go koda. Tā kā šajā piemērā tiks nodota struktūra, lai piekļūtu tās laukiem, izmantojiet punktu apzīmējumu:
<ķermenis>
<h1>{{ .Headline }}</h1>
<lpp> {{ .Body }} </lpp>
</body>
Aizstājiet tukšo pamatteksta elementu veidnes skeleta marķējumā ar iepriekš minēto kodu.
The roktura lapa apdarinātāja funkcija pārbaudīs, vai lapas pieprasījums ir GET pieprasījums. Pēc tam pirms veidnes renderēšanas un pēdējās lapas rādīšanas tas aizpilda struktūru ar datu paraugiem:
funcroktura lapa(rakstnieks http. ResponseWriter, pieprasiet *http. Pieprasīt) {
ja pieprasījumu. Metode == "GET" {
tmplt, _ = veidne. ParseFiles("tutorial.html")pasākums := Ziņas{
Virsraksts: "makeuseof.com ir viss tehniskais",
Pamatteksts: "Apmeklējiet MUO priekš jebkas, kas saistīts ar tehnoloģiju",
}kļūda := tmplt. Izpildīt (rakstnieks, pasākums)
ja kļūda! = nulle {
atgriezties
}
}
}
The ParseFiles metode parsē jūsu norādīto HTML failu. The notikumu mainīgais ir inicializētā struktūra. The Izpildīt metode ievadīs sniegtos datus pēdējā lapā atbilstoši vietturiem veidnē. Izpilde aizņem a ResponseWriter un dati, šajā gadījumā, struktūra.
Šis ir servera palaišanas un lapas apmeklēšanas rezultāts:
Vadības struktūru izmantošana veidnēs
Veidnēs varat izmantot arī vadības struktūras, piemēram, nosacījumu paziņojumus un cilpas.
Cilpa ļauj izvadīt vairākas vērtības un katrai atkārtoti izmantot to pašu struktūru. Izmantojiet diapazons atslēgvārds, lai definētu atkārtota satura sākumu un beigas beigu atslēgvārds. Cilpas ietvaros varat izmantot {{.}} sintakse pašreizējās vērtības ievadīšanai:
{{diapazons .}}
- {{.}}
{{end}}
Pēc tam jūs nosūtīsit tās datu struktūras nosaukumu, kuru vēlaties izmantot kā parametru Execute metodei:
makeUseOfCategories := []virkne{"Tehnoloģijas skaidrojums", "Programmēšana", "Linux",
"Android", "iOS", "Daudz vairāk..."}kļūda := tmplt. Izpildīt (writer, makeUseOfCategories)
ja kļūda! = nulle {
atgriezties
}
The makeUseOfCategories mainīgais ir virkņu daļa, kas jānodod kā datu parametrs. Lūk, cilpas izgriešanas rezultāts:
Veidnēs varat izmantot nosacījumu paziņojumu, lai pārbaudītu Būla mainīgā vērtību. Izveidojiet struktūru ar Būla laukiem, piemēram:
veids TrueFalser struktūra {
Ir patiess bool
Ir False bool
IsDefault bool
}
Lai izmantotu nosacījumu, iekļaujiet ja atslēgvārds dubultiekavās pirms pārbaudāmā mainīgā nosaukuma. Pabeidziet nosacījumu bloku ar beigas atslēgvārds iekavās:
{{if .IsTrue}}
<lpp>Novērtē patiesību un izlaidīs</lpp>
{{end}}{{if .IsDefault}}
<lpp>Novērtē nepatiesi un uzvarēja't izeja</lpp>
{{end}}
{{if .IsFalse}}
<lpp>Novērtē nepatiesi un uzvarēja't izeja</lpp>
{{end}}
Inicializējot struktūru programmā Go, pēc noklusējuma vērtības tiek iestatītas uz false, tādēļ, ja lauks netiek inicializēts, tas tiek novērtēts kā false. Inicializējot struktūru un nododot mainīgo kā datus veidnei, izvades parādīšanos izraisa tikai tie lauki, kuru novērtējums ir patiess.
izvēle := TrueFalser {
Ir patiess: taisnība,
Ir False: viltus,
}
kļūda := tmplt. Izpildīt (rakstnieks, izvēle)
Galīgajā izvadē ir tikai viena rindkopa, jo tikai lauks isTrue tiek novērtēts kā patiess:
Jums nav jāizmanto veidnes savām aizmugures lietojumprogrammām
Veidne nav obligāta jūsu Go lietotnēm. Varat izmantot citas pieejas, piemēram, lapas struktūras iegulšanu programmā, kā arī tās loģiku un citu darbību.
Tomēr jūs galu galā pieliksit vairāk darba sev. Go veidnes palīdz novērst XSS uzbrukumus un atvieglo darbu pie lapas struktūras nošķiršanu no aizmugursistēmas loģikas.