Når du bygger et websted, genererer du typisk noget af dit endelige indhold dynamisk. Du vil derefter injicere disse data i dine endelige websider til visning i en browser.

Du kan tage en af ​​to tilgange: Integrer din sidestruktur i dit program, eller kombiner dine endelige data med separate skabelonfiler.

Skabelon giver adskillelse af bekymringer for en mere vedligeholdelig kodebase. Det gør det også nemmere at opdele front-end-opgaver og back-end-opgaver ved at allokere dem til forskellige teammedlemmer. Go har fremragende skabelonunderstøttelse i sit standardbibliotek.

Kom godt i gang med skabeloner i Go

Go har to skabelonpakker i standardbiblioteket: tekst/skabelon og html/skabelon. Tekst/skabelonpakken har funktionalitet til at parse tekstfiler, mens html/skabelon håndterer HTML. Ved at bruge html/skabelonen er du sikret mod cross-site scripting (XSS) angreb, da Go undslipper dataindtastning under gengivelsen. Dette er en anden fordel ved skabelon frem for en manuel tilgang.

Da skabelonpakken er en del af standardbiblioteket, behøver du ikke installere nogen afhængigheder; bare importer det:

instagram viewer

importere "html/skabelon"

Start med oprettelse af en HTML-fil at bruge som skabelon til din ansøgning. Du kan bruge standarden .html forlængelse eller enten .gohtml eller .tmpl, begge er som også er almindelige. Uanset hvilken udvidelse du bruger, vil funktionaliteten i din applikation være den samme. Nogle tekstredigerere kan anvende forskellig syntaksfremhævning afhængigt af dine skabeloners udvidelser. Her er et grundlæggende skelet:

<!DOCTYPE html>
<html lang="da">
<hoved>
<meta tegnsæt="UTF-8">
<titel>Dokument</title>
</head>
<legeme>

</body>
</html>

Gem denne fil i dit Go-programs mappe. Du kan nu begynde at arbejde med det, som en skabelon, i dit program.

Opret en global forekomst af Skabelon skabelonpakkens metode. Du får adgang til denne skabeloninstans fra forskellige dele af dit program.

var tmplt *skabelon. Skabelon

Du bliver nødt til at oprette en simpel server for at gengive og vise dine skabeloner. Sådan starter du en simpel server i Go ved hjælp af net/http pakke:

funckøreServer() {
http. HandleFunc("/home", handlePage)
fejl := http. ListenAndServe("localhost:8080", nul)

hvis fejl!= nul {
log. Fatalln("Der er en fejl med serveren:", err)
}
}

Du ringer til køreServer funktion fra din hovedfunktion for at starte serveren. Serveren har kun én rute, den /home rute, som viser din side. Det handleSide parameter er navnet på en behandlerfunktion, der gengiver din side. Det ListenAndServe metoden starter serveren med at lytte på porten 8080localhost, altså din egen computer.

Overførsel af variabler til skabeloner

Opret en global struktur med navnet Nyheder:

type Nyheder struktur {
Overskrift snor
Legeme snor
}

Du skal bruge denne struktur til at gemme data og sende dem til din skabelon til visning på din sidste side. I din skabelon kan du derefter bruge denne syntaks til at injicere data:

{{ navn }}

Hvor navn er navnet på en variabel, du har videregivet til din skabelon. Når du gengiver skabelonen, erstatter den værdier i klammer med tilsvarende data fra din Go-kode. Da følgende eksempel vil videregive en struct, vil du bruge punktnotation til at få adgang til dens felter:

<legeme>
<h1>{{ .Headline }}</h1>
<s> {{ .Body }} </s>
</body>

Udskift det tomme kropselement i din skabelons skeletmarkering med koden ovenfor.

Det handleSide handlerfunktionen vil bekræfte, at anmodningen om siden er en GET-anmodning. Den udfylder derefter en struktur med eksempeldata, før den gengiver skabelonen og serverer den sidste side:

funchandleSide(forfatter http. ResponseWriter, anmod om *http. Anmodning) {
hvis anmodning. Metode == "GET" {
tmplt, _ = skabelon. ParseFiles("tutorial.html")

begivenhed := Nyheder{
Overskrift: "makeuseof.com har alt teknisk",
Krop: "Besøg MUO til noget teknologirelateret",
}

fejl := tmplt. Udfør (skribent, begivenhed)

hvis fejl!= nul {
Vend tilbage
}
}
}

Det ParseFiles metoden analyserer den HTML-fil, du angiver. Det begivenhed variabel er den initialiserede struktur. Det Udfør metoden injicerer de leverede data på den sidste side i henhold til pladsholderne i skabelonen. Udfør tager en ResponseWriter og dataene, i dette tilfælde strukturen.

Her er resultatet fra at køre serveren og besøge siden:

Brug af kontrolstrukturer i skabeloner

Du kan også bruge kontrolstrukturer som betingede sætninger og loops i dine skabeloner.

En loop giver dig mulighed for at udlæse flere værdier og genbruge den samme struktur for hver. Brug rækkevidde nøgleord for at definere begyndelsen af ​​det gentagne indhold og ende nøgleord til slutningen. Inden for løkken kan du bruge {{.}} syntaks for at indsætte den aktuelle værdi:


    {{rækkevidde .}}
  1. {{.}}

  2. {{ende}}

Derefter videregiver du navnet på den datastruktur, du vil gennemløbe, som en parameter til Execute-metoden:

makeUseOfCategories := []snor{"Teknologi forklaret", "Programmering", "Linux",
"Android", "iOS", "Mange flere..."}

fejl := tmplt. Udfør (skribent, makeUseOfCategories)

hvis fejl!= nul {
Vend tilbage
}

Det makeUseOfCategories variabel er et udsnit af strenge, der skal sendes som dataparameter. Her er resultatet af at sløjfe gennem skiven:

Du kan bruge en betinget sætning i dine skabeloner til at teste værdien af ​​en boolsk variabel. Opret en struktur med booleske felter, som denne:

type TrueFalser struktur {
Er sandt bool
Er Falsk bool
Er Default bool
}

For at bruge en betinget skal du inkludere hvis nøgleord i dobbelt parentes før navnet på den variabel, der skal testes. Afslut den betingede blok med ende nøgleord i seler:

{{if .IsTrue}}
<s>Evaluerer sandt og vil output</s>
{{ende}}

{{if .IsDefault}}
<s>Evaluerer falsk og vandt't output</s>
{{ende}}

{{if .IsFalse}}
<s>Evaluerer falsk og vandt't output</s>
{{ende}}

Initialisering af en struct i Go indstiller værdierne til false på standard, så hvis du ikke initialiserer et felt, evalueres det til false. Ved initialisering af strukturen og overførsel af variablen som data til skabelonen er det kun de felter, der evalueres til sand, der forårsager, at output vises.

valg := TrueFalser {
Er sandt: rigtigt,
Er falsk: falsk,
}

fejl := tmplt. Udfør (skribent, valg)

Det endelige output inkluderer kun et enkelt afsnit, da kun isTrue-feltet evalueres til sandt:

Du behøver ikke bruge skabeloner til dine backend-applikationer

Skabeloner er ikke et krav til dine Go-apps. Du kan bruge andre tilgange som at indlejre din sidestruktur i dit program sammen med dets logik og anden adfærd.

Du ender dog med at gøre mere arbejde for dig selv. Go-skabeloner hjælper med at forhindre XSS-angreb og gør det nemmere at adskille arbejde på sidestruktur fra backend-logik.