Tema
/
Interneto svetainių serverio dalies kūrimas GO
📖 Teorija

Kodėl Templ — tipų sauga ir generavimas

1 pamoka baigėsi tuo, kad Home rašė HTML kaip paprastą Go eilutę. Tinka vienai eilutei ir subyra tikram puslapiui: jokio tipų tikrinimo, trūkstamas </div> puikiai kompiliuojasi ir lūžta vykdymo metu, o antraštės tarp puslapių niekaip nepasidalinsi. Reikia tikrų šablonų — ir norim, kad jie būtų tipiškai saugūs.

Templ kompiliuoja HTML šablonus į Go funkcijas. Rašai .templ failus; generatorius kiekvieną paverčia _templ.go failu — paprastu Go. Nauda: šablonas tikrinamas tipais kaip bet koks kitas Go kodas. Paduok int ten, kur šablonas laukia string, ir jis nesikompiliuos — klaida build metu, tikslioje eilutėje, o ne tuščia vieta gyvame puslapyje.

Generavimo žingsnis. Parašęs ar pakeitęs .templ failą, paleidi:

templ generate

Tai iš naujo sugeneruoja _templ.go failus. Sugeneruotą .go komituojam kartu su .templ — kad programa susikompiliuotų ir įsidiegtų vien su Go įrankiais; templ reikia tik tada, kai keiti šabloną. (Tai atkartoja, kaip tikras projektas laiko generuotą kodą repozitorijoje, kad CI nereikėtų diegti visų kodo generavimo įrankių.)

Spąstai — pasenusio šablono spąstai. Pakeiti .templ, pamiršti paleisti templ generate, perkrauni puslapį — ir matai seną išvestį, nes veikiantis dvejetainis naudoja komituotą _templ.go, ne tavo pakeistą .templ. Atrodo, lyg pakeitimas nieko nedavė. Jis ne sugedęs — jis nesugeneruotas. Įprotis, kuris gelbsti: keiti .templtempl generate → perkompiliuoji. (Daugelis redaktorių paleidžia tai išsaugant.)

HTMX, vietinis — jokio build žingsnio. SignFlow vėliau naudoja HTMX interaktyvumui (forma, kuri išsiunčia be viso puslapio perkrovimo). HTMX — vienas JavaScript failas; jį vietiname po static/js/htmx.min.js ir susiejam iš maketo. Jokio npm, jokio bundlerio, jokios CDN priklausomybės vykdymo metu — failas keliauja dvejetainio viduje. Visas priekinis galas: serveryje atvaizduotas HTML + vienas vietinis scenarijus.

Ši pamoka. Sukursi bendrą Layout, Home puslapį, kuris į jį įsistato, mažą render pagalbininką ir sujungsi Home, kad atvaizduotų šabloną, o ne eilutę. Tas pats puslapis kaip 1 pamokoje — bet dabar kompiliatorius jį tikrina, ir jis pagaliau turi šiek tiek CSS.