Când construiți un site web, veți genera de obicei o parte din conținutul final în mod dinamic. Apoi, veți dori să injectați acele date în paginile dvs. web finale pentru a fi afișate într-un browser.

Puteți adopta una dintre două abordări: încorporați structura paginii în program sau combinați datele finale cu fișiere șablon separate.

Modelarea oferă separarea preocupărilor pentru o bază de cod mai ușor de întreținut. De asemenea, facilitează împărțirea sarcinilor front-end și sarcinile back-end, alocandu-le diferiților membri ai echipei. Go are suport excelent pentru șabloane în biblioteca sa standard.

Noțiuni introductive cu șabloane în Go

Go are două pachete de șabloane în biblioteca standard: text/șablon și html/șablon. Pachetul text/șablon are funcționalitate pentru analizarea fișierelor text, în timp ce html/șablon se ocupă de HTML. Folosind html/șablonul, sunteți protejat de atacurile cross-site scripting (XSS), deoarece Go scapă de introducerea datelor în timpul redării. Acesta este un alt avantaj al șablonului față de o abordare manuală.

instagram viewer

Deoarece pachetul șablon face parte din biblioteca standard, nu va trebui să instalați nicio dependență; doar importa-l:

import „html/șablon”

Începe prin crearea unui fișier HTML pentru a utiliza ca șablon pentru aplicația dvs. Puteți folosi standardul .html extensie sau oricare .gohtml sau .tmpl, ambele sunt și ele comune. Indiferent de extensia pe care o utilizați, funcționalitatea aplicației dvs. va fi aceeași. Unele editoare de text pot aplica o evidențiere de sintaxă diferită, în funcție de extensiile șabloanelor. Iată un schelet de bază:

<!DOCTYPE html>
<limba html="ro">
<cap>
<meta charset="UTF-8">
<titlu>Document</title>
</head>
<corp>

</body>
</html>

Salvați acest fișier în directorul programului Go. Acum puteți începe să lucrați cu el, ca șablon, în cadrul programului dvs.

Creați o instanță globală a Șablon metoda pachetului șablon. Veți accesa această instanță șablon din diferite părți ale programului dvs.

var tmplt *șablon. Șablon

Va trebui să creați un server simplu pentru a reda și afișa șabloanele. Iată cum să porniți un server simplu în Go folosind net/http pachet:

funcrunServer() {
http. HandleFunc("/home", handlePage)
greșit := http. ListenAndServe("localhost:8080", zero)

dacă greseala != zero {
Buturuga. Fatalln(„A apărut o eroare cu serverul:”, err)
}
}

Vei suna la runServer funcția principală pentru a porni serverul. Serverul are o singură rută, the /home traseu, care va afișa pagina dvs. The handlePage parametrul este numele unei funcții de gestionare care va reda pagina dvs. The ListenAndServe metoda pornește serverul care ascultă pe port 8080 pe localhost, adică propriul computer.

Transmiterea de variabile la șabloane

Creați o structură globală numită Știri:

tip Știri struct {
Titlu şir
Corp şir
}

Veți folosi această structură pentru a stoca date și a le transmite șablonului pentru a le afișa pe pagina finală. În șablonul dvs., puteți utiliza această sintaxă pentru a injecta date:

{{ Nume }}

Unde Nume este numele unei variabile pe care ați transmis-o șablonului. Când randați șablonul, acesta va înlocui valorile dintre acolade cu datele corespunzătoare din codul dvs. Go. Deoarece următorul exemplu va transmite o structură, veți folosi notația cu puncte pentru a accesa câmpurile acesteia:

<corp>
<h1>{{ .Titul }}</h1>
<p> {{ .Corp }} </p>
</body>

Înlocuiți elementul de corp gol din marcajul schelet al șablonului cu codul de mai sus.

The handlePage funcția de gestionare va verifica dacă cererea pentru pagină este o solicitare GET. Apoi populează o structură cu date eșantion înainte de a randa șablonul și de a servi pagina finală:

funchandlePage(scriitor http. ResponseWriter, solicitați *http. Cerere) {
dacă cerere. Metoda == "GET" {
tmplt, _ = șablon. ParseFiles("tutorial.html")

eveniment := Știri{
Titlu: „makeuseof.com are totul tehnic”,
Corp: „Vizitați MUO pentru orice legat de tehnologie",
}

err := tmplt. Execută (scriitor, eveniment)

dacă greseala != zero {
întoarcere
}
}
}

The ParseFiles metoda analizează fișierul HTML pe care îl specificați. The eveniment variabila este structura initializata. The A executa metoda va injecta datele furnizate în pagina finală, conform substituenților din șablon. Execute ia a ResponseWriter iar datele, în acest caz, struct.

Iată rezultatul rulării serverului și accesării paginii:

Utilizarea structurilor de control în șabloane

De asemenea, puteți utiliza structuri de control, cum ar fi instrucțiuni condiționate și bucle în șabloanele dvs.

O buclă vă permite să scoateți mai multe valori și să reutilizați aceeași structură pentru fiecare. Folosește gamă cuvânt cheie pentru a defini începutul conținutului repetat și Sfârşit cuvânt cheie pentru final. În cadrul buclei, puteți utiliza {{.}} sintaxă pentru a injecta valoarea curentă:


    {{gamă .}}
  1. {{.}}

  2. {{Sfârşit}}

Apoi veți trece numele structurii de date prin care doriți să o treceți ca parametru la metoda Execute:

makeUseOfCategories := []şir{"Tehnologie explicată", "Programare", "Linux",
„Android”, „iOS”, „Multe altele...”}

err := tmplt. Execute (scriitor, makeUseOfCategories)

dacă greseala != zero {
întoarcere
}

The makeUseOfCategories variabila este o porțiune de șiruri care trebuie transmisă ca parametru de date. Iată rezultatul buclei prin felie:

Puteți utiliza o instrucțiune condiționată în șabloanele dvs. pentru a testa valoarea unei variabile booleene. Creați o structură cu câmpuri booleene, astfel:

tip TrueFalser struct {
Este adevarat bool
Este Fals bool
IsDefault bool
}

Pentru a folosi un condițional, includeți dacă cuvânt cheie între acolade duble înainte de numele variabilei de testat. Încheiați blocul condiționat cu Sfârşit cuvânt cheie între acolade:

{{dacă .IsTrue}}
<p>Evaluează adevărat și va ieși</p>
{{Sfârşit}}

{{dacă .IsDefault}}
<p>Evaluează fals și câștigat't ieșire</p>
{{Sfârşit}}

{{dacă .IsFalse}}
<p>Evaluează fals și câștigat't ieșire</p>
{{Sfârşit}}

Inițializarea unei structuri în Go setează valorile la false în mod implicit, așa că dacă nu inițializați un câmp, acesta este evaluat ca fals. La inițializarea structurii și la trecerea variabilei ca date în șablon, numai câmpurile care se evaluează la adevărat fac să apară rezultatul.

alegere := TrueFalser {
Este adevarat: Adevărat,
Este fals: fals,
}

err := tmplt. Executare (scriitor, alegere)

Rezultatul final include doar un singur paragraf, deoarece numai câmpul isTrue este evaluat ca adevărat:

Nu trebuie să utilizați șabloane pentru aplicațiile dvs. de backend

Crearea de șabloane nu este o cerință pentru aplicațiile dvs. Go. Puteți folosi alte abordări, cum ar fi încorporarea structurii paginii în programul dvs., alături de logica și alt comportament.

Cu toate acestea, vei ajunge să faci mai multă muncă pentru tine. Templatingul Go ajută la prevenirea atacurilor XSS și facilitează separarea lucrărilor asupra structurii paginii de logica backend.